我的项目中有一个圆形模型:
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 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
});
示例对象:
{
"_id": ObjectId("58cf4832a96e0e3d9cec6918"),
"patientID": ObjectId("58fea8ce91f54540c4afa3b4"),
"circleName": "circle1",
"caregivers": [
ObjectId("58fea81791f54540c4afa3b3"),
ObjectId("58fea7ca91f54540c4afa3b2")
],
"accessLevel": {
"location\"": true,
"notes": false,
"vitals": true
}
}
我已经为猫鼬尝试了虚拟填充,但我无法让它工作。 这似乎是完全相同的问题: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 });
现在可以完美运行了。
如果您使用 expressJs res.json 方法,只需添加:
yourSchema.set('toJSON', { virtuals: true });
或者你可以直接使用toJSON/toObject:
doc.toObject({ virtuals: true })) // or doc.toJSON({ virtuals: true }))