gpt4 book ai didi

node.js - Mongoose 多重深度填充

转载 作者:可可西里 更新时间:2023-11-01 09:10:31 25 4
gpt4 key购买 nike

比如说,我有 Manager 模式:

{
name: { type: String },
clients: [{ type: Mongoose.Schema.ObjectId, ref: 'Client'}]
}

而且,我有 Client 模式:

{
name : { type String },
cars : [{ type: Mongoose.Schema.ObjectId, ref: 'Car' }],
houses: [{ type: Mongoose.Schema.ObjectId, ref: 'House' }]
}

还有 CarHouse(它们的结构对于这个问题并不重要。我如何深入填充多个 Client 的字段在单个 .populate() 调用中?

我尝试了什么:

Manager.find()
.populate({
path: 'users',
populate: { path: 'cars' },
populate: { path: 'houses' }
});

如果它有效(因为我覆盖了之前声明的传递给 .populate() 方法的 populate 键),我真的会感到惊讶。我的示例显然为每个用​​户返回填充的 houses 字段 - 最后一个。老实说,不知道,docs 什么都没有任何一个。它甚至受支持吗?根据我的例子,我知道这是为了“浅”填充:

User.populate('cars')
.populate('houses')

那么深的呢?

最佳答案

1) 传递具有要填充的属性的对象数组:

Manager.find()
.populate({
path : 'users',
populate: [
{ path: 'cars' },
{ path: 'houses' }
]
});

此解决方案可以充分利用深度填充。考虑:

Manager.find()
.populate({
path : 'users',
populate: [
{ path: 'cars' },
{
path : 'houses',
populate: {
path : 'rooms',
populate: 'windows'
}
}
]
});

2) 传递要填充的以空格分隔的集合字符串:

Manager.find()
.populate({
path : 'users',
populate: 'cars houses'
});

关于node.js - Mongoose 多重深度填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46001213/

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