Can't get the result of Mongoose virtual populate
mongoose, mongoose-populate, node.js
Solution
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.
Problem
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 caregiverSchema = 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 Mongoose 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 ids in the result. It is not getting populated.