Mongoosejs虚拟填充

我的项目中有一个圈子模型:

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' }); 

照顾者架构:

 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 }); 

示例对象:

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

我已经尝试了虚拟填充mongoosejs,但我无法得到它的工作。 这似乎是完全相同的问题: 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); }); 

我只是在结果中获取对象ID。 它没有得到填充。

找出问题所在。 默认情况下,虚拟字段不包含在输出中。 在圈子模式中添加这个之后:

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

它现在完美地工作。