J'ai un modèle de cercle dans mon projet:
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'
});
schéma du soignant:
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
});
Exemple d'objet:
{
"_id" : ObjectId("58cf4832a96e0e3d9cec6918"),
"patientID" : ObjectId("58fea8ce91f54540c4afa3b4"),
"circleName" : "circle1",
"caregivers" : [
ObjectId("58fea81791f54540c4afa3b3"),
ObjectId("58fea7ca91f54540c4afa3b2")
],
"accessLevel" : {
"location\"" : true,
"notes" : false,
"vitals" : true
}
}
J'ai essayé le peuplement virtuel pour mongoosejs mais je n'arrive pas à le faire fonctionner. Cela semble être exactement le même problème: 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);
});
J'obtiens seulement l'ID d'objet dans le résultat. Il ne se remplit pas.
Compris quel était le problème. Par défaut, les champs virtuels ne sont pas inclus dans la sortie. Après avoir ajouté cela dans le schéma circulaire:
circleSchema.virtual('caregiver_details',{
ref: 'caregiver',
localField: 'caregivers',
foreignField: 'userId'
});
circleSchema.set('toObject', { virtuals: true });
circleSchema.set('toJSON', { virtuals: true });
Cela fonctionne maintenant parfaitement.
Si vous utilisez la méthode expressJs res.json , il suffit d'ajouter uniquement:
yourSchema.set('toJSON', { virtuals: true });
Ou vous pouvez utiliser directement toJSON/toObject :
doc.toObject({ virtuals: true })) // or doc.toJSON({ virtuals: true }))