CEN*_*EDE 3 mongoose mongodb node.js mongoose-populate
我有一个模特A
机智这个领域:
var field = {
foo: String,
b: [{ type: Schema.Types.ObjectId, ref: 'B' }]
}
Run Code Online (Sandbox Code Playgroud)
和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
}
Run Code Online (Sandbox Code Playgroud)
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);
})
Run Code Online (Sandbox Code Playgroud)
-it应该返回填充的第二级并且确实如此,但问题是它只是在函数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 ...
]
}
]
Run Code Online (Sandbox Code Playgroud)
我期待这样的事情:
[
{
"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 ...
]
}
]
Run Code Online (Sandbox Code Playgroud)
我不知道为什么它甚至接受populate
了对象中的多个键,它已经被复制了,你指定填充的是:
populate: {
path: 'b',
model: B
},
populate: {
path: 'c',
model: C
},
Run Code Online (Sandbox Code Playgroud)
这里属性populate
重复,只考虑最后定义的属性.
您需要将填充路径指定为一个数组.所以你的populate属性将成为:
populate: [{
path: 'b',
model: B
},{
path: 'c',
model: C
}]
Run Code Online (Sandbox Code Playgroud)
而查询是,
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);
})
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1557 次 |
最近记录: |