比如说,我有 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' }]
}
还有 Car
和 House
(它们的结构对于这个问题并不重要。我如何深入填充多个 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/