gpt4 book ai didi

node.js - Mongoose 深度填充多个二级对象不起作用

转载 作者:可可西里 更新时间:2023-11-01 09:20:13 24 4
gpt4 key购买 nike

我有一个模型 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通过 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.populate({}) 上声明的最后一个 path 函数,在这种情况下仅填充模型 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 ...
]
}
]

最佳答案

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

 populate: {
path: 'b',
model: B
},
populate: {
path: 'c',
model: C
},

此处属性 populate 被复制,并且只考虑最后定义的一个。

您需要将填充路径指定为数组一次。所以你的 populate 属性(property)将变成:

 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);
})

关于node.js - Mongoose 深度填充多个二级对象不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35957072/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com