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
。但是,当您使用modelB
更改其位置时,将填充modelB
上面的查询返回如下内容:
[
{
"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驱动程序。