Mongoosejs virtual populate

匿名 (未验证) 提交于 2019-12-03 08:48:34

问题:

I have a circle model in my project:

var circleSchema = new Schema({ //circleId: {type: String, unique: true, required: true}, patientID: {type: Schema.Types.ObjectId, ref: "patient"}, circleName: String, caregivers: [{type: Schema.Types.ObjectId}], accessLevel: Schema.Types.Mixed });  circleSchema.virtual('caregiver_details',{     ref: 'caregiver',     localField: 'caregivers',     foreignField: 'userId' }); 

caregiver schema:

var cargiverSchema = new Schema({     userId: {type: Schema.ObjectId, unique: true},  //objectId of user document     detailId: {type: Schema.ObjectId, ref: "contactDetails"},     facialId: {type: Schema.ObjectId, ref: "facialLibrary"}, //single image will be enough when using AWS rekognition     circleId: [{type: Schema.Types.ObjectId, ref: "circle"}],           //multiple circles can be present array of object id }); 

Sample Object:

{      "_id" : ObjectId("58cf4832a96e0e3d9cec6918"),      "patientID" : ObjectId("58fea8ce91f54540c4afa3b4"),      "circleName" : "circle1",      "caregivers" : [         ObjectId("58fea81791f54540c4afa3b3"),          ObjectId("58fea7ca91f54540c4afa3b2")     ],      "accessLevel" : {         "location\"" : true,          "notes" : false,          "vitals" : true     } } 

I have tried virtual populate for mongoosejs but I am unable to get it to work. This seems to be the exact same problem: https://github.com/Automattic/mongoose/issues/4585

circle.find({"patientID": req.user._id}).populate('caregivers').exec(function(err, items){         if(err){console.log(err); return next(err) }         res.json(200,items);     }); 

I am only getting the object id's in the result. It is not getting populated.

回答1:

Figured out what the problem was. By default, the virtual fields are not included in the output. After adding this in circle schema:

circleSchema.virtual('caregiver_details',{     ref: 'caregiver',     localField: 'caregivers',     foreignField: 'userId' });  circleSchema.set('toObject', { virtuals: true }); circleSchema.set('toJSON', { virtuals: true }); 

It now works perfectly.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!