advaya-mongo
Advanced tools
Comparing version 1.0.3 to 1.0.4
var ObjectId= require('mongodb').ObjectId; | ||
var _= require('lodash'); | ||
@@ -16,72 +17,74 @@ //dbCore | ||
{ | ||
if(!fields || !Array.isArray(fields)) | ||
fields=Object.keys(model.schema.reference); | ||
var filterReference=Object.keys(model.schema.reference) | ||
.filter(function (val) { | ||
if(fields.indexOf(val)>=0) | ||
return true; | ||
}); | ||
// console.log('\nfilterReference\n',filterReference,model.schema.reference); | ||
var arrayConverted= false; | ||
if(!Array.isArray(obj)) | ||
{ | ||
arrayConverted= true; | ||
obj=[obj]; | ||
} | ||
var allIds= filterReference.map(function (reference) { | ||
return { | ||
referenceField: reference, | ||
reference: model.schema.reference[reference], | ||
referenceIds: obj.map(function (val) { | ||
return new ObjectId(val[reference]); | ||
}) | ||
}; | ||
// if no fields defined just set it all the fields | ||
if(!fields || !Array.isArray(fields)) | ||
fields=Object.keys(model.schema.reference); | ||
var allFields=Object.keys(model.schema.reference); | ||
var fields=_.difference(allFields,_.difference(allFields,fields)); | ||
var allIds= fields.map(function (field) { | ||
return{ | ||
referenceField: field, | ||
reference: model.schema.reference[field].model, | ||
referenceIds: _.uniq( obj | ||
.filter(x=> {if(x.hasOwnProperty(field)) return true;}) | ||
.map(x=>x[field]) | ||
).map( x => new ObjectId(x)) | ||
} | ||
}); | ||
// console.log('\nallIds\n',allIds); | ||
var allIdsPromise= allIds.map(function (reference) { | ||
if(!allModels[reference.reference].schema.hasOwnProperty('embeded')) | ||
var allIdsPromise= allIds.map(function (allId) { | ||
if(!allModels[allId.reference].schema.hasOwnProperty('embeded')) | ||
return find( | ||
reference.reference, | ||
{_id:{$in:reference.referenceIds}}, | ||
projectionUtil(allModels[reference.reference],{}) | ||
allId.reference, | ||
{_id:{$in:allId.referenceIds}}, | ||
projectionUtil(allModels[allId.reference],{}) | ||
).toArray(); | ||
else | ||
return findEmbeded( | ||
reference.reference, | ||
{_id:{$in:reference.referenceIds}}, | ||
projectionUtil(allModels[reference.reference],{}), | ||
allModels[reference.reference].schema.embeded | ||
allId.reference, | ||
{_id:{$in:allId.referenceIds}}, | ||
projectionUtil(allModels[allId.reference],{}), | ||
allModels[allId.reference].schema.embeded | ||
); | ||
}); | ||
return Promise.all(allIdsPromise) | ||
.then(function (allFounds) { | ||
allIds.forEach(function (reference,allIdsIndex) { | ||
foundIds= allFounds[allIdsIndex].map(function(x) { return x._id.toString()}); | ||
obj.map(function (val) { | ||
if(foundIds.indexOf(val[reference.referenceField]) >=0) | ||
{ | ||
index= foundIds.indexOf(val[reference.referenceField]); | ||
val[reference.referenceField]= allFounds[allIdsIndex][index]; | ||
} | ||
else | ||
{ | ||
val[reference.referenceField]= null; | ||
} | ||
return val; | ||
var PromiseResolved= Promise.all(allIdsPromise) | ||
.then(function (allResults) { | ||
return allResults.map(function(result){ | ||
return result.map(function (x) { | ||
x._id= x._id.toString(); | ||
return x; | ||
}); | ||
}) | ||
}) | ||
.then(function (allResults) { | ||
return allResults.map(function(result){ | ||
return _.groupBy(result,'_id'); | ||
}) | ||
}) | ||
.then(function (allResults) { | ||
// console.log(JSON.stringify(allResults,null,2)); | ||
var newObj; | ||
fields.map(function (field,ind) { | ||
newObj= obj.map(function (individual) { | ||
if(allResults[ind].hasOwnProperty(individual[field])) | ||
individual[field]= allResults[ind][ individual[field] ]; | ||
else if(typeof(individual[field]) !="undefined" ) | ||
individual[field]= null; | ||
return individual; | ||
}); | ||
}); | ||
if(arrayConverted) | ||
obj=obj[0]; | ||
return obj; | ||
return newObj; | ||
}); | ||
return PromiseResolved; | ||
} | ||
@@ -97,2 +100,2 @@ else | ||
return input; | ||
} | ||
} |
@@ -37,11 +37,11 @@ var ObjectID = require('mongodb').ObjectID; | ||
return new ObjectID(id); | ||
}, | ||
}; | ||
modelApi.generateId = function () { | ||
return new ObjectID(); | ||
}, | ||
}; | ||
modelApi.ObjectID = function () { | ||
return ObjectID; | ||
}, | ||
}; | ||
@@ -48,0 +48,0 @@ return { |
{ | ||
"name": "advaya-mongo", | ||
"version": "1.0.3", | ||
"version": "1.0.4", | ||
"description": "Advaya mongo plugin", | ||
@@ -26,2 +26,3 @@ "main": "index.js", | ||
"deepmerge": "^0.2.10", | ||
"lodash": "^4.16.0", | ||
"mongodb": "^2.2.10", | ||
@@ -28,0 +29,0 @@ "require-all": "^2.0.0" |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
27478
894
4
+ Addedlodash@^4.16.0
+ Addedlodash@4.17.21(transitive)