【发布时间】:2016-06-27 16:37:55
【问题描述】:
我有一个模型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
}
基于answer by Trinh Hoang Nhu 通过这样做-
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({}) 函数上声明的最后一个 path populate,在这种情况下仅填充模型 C。但是,当您使用模型B 更改它的位置时,模型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 ...
]
}
]
【问题讨论】:
标签: node.js mongodb mongoose mongoose-populate