Node.js Mongoose深度填充多个二级对象不工作

Node.js Mongoose深度填充多个二级对象不工作,node.js,mongodb,mongoose,mongoose-populate,Node.js,Mongodb,Mongoose,Mongoose Populate,我有一个带有此字段的型号a: var field = { foo: String, b: [{ type: Schema.Types.ObjectId, ref: 'B' }] } 和型号B,具有以下特征: var field = { c: { type: Schema.Types.ObjectId, ref: 'C' } // let's say this has 3 string field d: { type: Schema.Types.ObjectI

我有一个带有此字段的型号
a

var field = {
    foo: String,
    b: [{ type: Schema.Types.ObjectId, ref: 'B' }]
}  
和型号
B
,具有以下特征:

var field = {
    c: { type: Schema.Types.ObjectId, ref: 'C' } // let's say this has 3 string field
    d: { type: Schema.Types.ObjectId, ref: 'D' } // so was this
}
以此为基础,通过这样做-

 A.find({_id:req.params.id})
    .populate({ path: 'patient', model: Patient,
        populate: {
            path: 'b',
            model: B
        },
        populate: {
            path: 'c',
            model: C
        },
    })
    .exec(function (err, doc) {
        res.send(doc);
    })
-它应该返回已填充的第二级,但问题是它只返回在
.populate({})
函数上声明的最后一个
路径,在这种情况下,只填充模型
C
。但是,当您使用model
B
更改其位置时,将填充model
B

上面的查询返回如下内容:

[
    {
        "foo":"Bar",
        "b": [
            {
                "c":"a32s1da4fas1a23s1da56s4c",
                "d":{
                    "foo1":"Bar1",
                    "foo2":"Bar2",
                    "foo3":"Bar3"
                }
            },
            {
                "c":"a32s1da4fas1a23s1da56s4d",
                "d":{
                    "foo1":"Bar1",
                    "foo2":"Bar2",
                    "foo3":"Bar3"
                }
            }
            // so on ...
        ]
    }
]
我期待着这样的事情:

[
    {
        "foo":"Bar",
        "b": [
            {
                "c":{
                    "foo1":"Bar1",
                    "foo2":"Bar2",
                    "foo3":"Bar3"
                },
                "d":{
                    "foo1":"Bar1",
                    "foo2":"Bar2",
                    "foo3":"Bar3"
                }
            },
            {
                "c":{
                    "foo1":"Bar1",
                    "foo2":"Bar2",
                    "foo3":"Bar3"
                },
                "d":{
                    "foo1":"Bar1",
                    "foo2":"Bar2",
                    "foo3":"Bar3"
                }
            }
            // so on ...
        ]
    }
]

我不知道为什么它甚至在对象中接受多个
填充
键,它已经被复制了,
您指定要填充的内容是:

 populate: {
            path: 'b',
            model: B
        },
        populate: {
            path: 'c',
            model: C
        },
在这里,属性
populate
被复制,并且只考虑最后定义的属性

您需要将填充路径作为数组指定一次。因此,您的“填充”属性将成为:

 populate: [{
            path: 'b',
            model: B
        },{
            path: 'c',
            model: C
        }]
问题是

A.find({_id:req.params.id})
    .populate({ path: 'patient', model: Patient,
        populate: [{
            path: 'b',
            model: B
        },{
            path: 'c',
            model: C
        }],
    })
    .exec(function (err, doc) {
        res.send(doc);
    })

天哪!谢谢你,内姆!我还没注意到。节省了我一些时间!!非常感谢,伙计!我正在努力解决这个用例。我仍然认为我们可能会避免使用mongoose,而是使用本机nodejs mongodb驱动程序。