UNPKG

mongodbrelation

Version:

ONE_TO_MANY, MANY_TO_ONE, ONE_TO_ONE, MANY_TO_MANY realtionships among diffrent collections in mongodb

89 lines (88 loc) 3.4 kB
const JOIN_TYPE_ENUM = { ONE_TO_ONE: 1, ONE_TO_MANY: 2, MANY_TO_MANY: 3, MANY_TO_ONE: 4 } module.exports = { joinedQuery : function (condition,joinCollectionName, joinFieldName, foreignFieldName, aliasname, outputfields, typeofJoin) { let error = null; if (!joinCollectionName && !joinFieldName && !foreignFieldName && !outputfields && !typeofJoin) { error = new Error(); error.name = 'invalid input'; error.message = "please pass mandatory fields"; } if (!JOIN_TYPE_ENUM.hasOwnProperty(typeofJoin)){ error = new Error(); error.name = 'invalid input'; error.message = "please pass proper typeofJoin"; } if (error) { throw error; return 0; } let query = []; let lookupparentjson = {$lookup: null}; let lookupjson = {from: '', localField: '', foreignField: '', as: '' }; let unwindparentjson = {$unwind: null}; let projectparentjson = {$project: null}; if (condition) { let matchparentjson = {$match: null}; matchparentjson.$match = condition; query.push(matchparentjson); } try { switch (JOIN_TYPE_ENUM[typeofJoin]) { case 1: lookupjson.from = joinCollectionName; lookupjson.localField = joinFieldName; lookupjson.foreignField = foreignFieldName; lookupjson.as = aliasname; lookupparentjson.$lookup = lookupjson; query.push(lookupparentjson); unwindparentjson.$unwind = '$'+aliasname; query.push(unwindparentjson); break; case 2: lookupjson.from = joinCollectionName; lookupjson.localField = joinFieldName; lookupjson.foreignField = foreignFieldName; lookupjson.as = aliasname; lookupparentjson.$lookup = lookupjson; query.push(lookupparentjson); // unwindparentjson.$unwind = '$'+aliasname; // query.push(unwindparentjson); break; case 3: lookupjson.from = joinCollectionName; lookupjson.localField = joinFieldName; lookupjson.foreignField = foreignFieldName; lookupjson.as = aliasname; lookupparentjson.$lookup = lookupjson; query.push(lookupparentjson); break; case 4: lookupjson.from = joinCollectionName; lookupjson.localField = joinFieldName; lookupjson.foreignField = foreignFieldName; lookupjson.as = aliasname; lookupparentjson.$lookup = lookupjson; query.push(lookupparentjson); unwindparentjson.$unwind = '$'+aliasname; query.push(unwindparentjson); break; } if (outputfields) { projectparentjson.$project = outputfields; query.push(projectparentjson) } // push look up // push unwind if applicable // push project fields return query; } catch (e) { throw e; return 0; } } }