拿不到Mongoose虚拟填充的结果

问题描述 投票:0回答:2

我的项目中有一个圆形模型:

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。它没有人口增长。

node.js mongoose mongoose-populate
2个回答
80
投票

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

circleSchema.virtual('caregiver_details',{
    ref: 'caregiver',
    localField: 'caregivers',
    foreignField: 'userId'
});

circleSchema.set('toObject', { virtuals: true });
circleSchema.set('toJSON', { virtuals: true });

现在可以完美运行了。


2
投票

如果您使用 expressJs res.json 方法,只需添加:

yourSchema.set('toJSON', { virtuals: true });

或者你可以直接使用toJSON/toObject

doc.toObject({ virtuals: true })) // or doc.toJSON({ virtuals: true }))
© www.soinside.com 2019 - 2024. All rights reserved.