猫鼬多重深度填充
Mongoose multiple deep populates
说,我有 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
(它们的结构对于这个问题并不重要。我如何在单个[=19=中深度填充多个Client
的字段]打电话?
我尝试了什么:
Manager.find()
.populate({
path: 'users',
populate: { path: 'cars' },
populate: { path: 'houses' }
});
如果它有效(因为我覆盖了之前声明的传递给 .populate()
方法的 populate
键,我真的会感到惊讶)。我的示例显然 returns 每个用户填充 houses
字段 - 最后一个。老实说,不知道,docs 中也没有。它甚至受支持吗?根据我的示例,我知道它用于 'shallow' 填充:
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) 传递要填充的 space 分隔集合的字符串:
Manager.find()
.populate({
path : 'users',
populate: 'cars houses'
});
这是做嵌套填充的方法。在这种情况下,首先它将填充用户,然后填充用户的爱好,然后根据用户的爱好填充足球,然后它会从用户填充最喜欢的球员姓名 -> 爱好 -> 足球 -> 最喜欢的球员。
Model.find()
.populate({
path : 'users',
populate: [
{ path: 'Hobbies' },
{
path : 'Football',
populate: {
path : 'favouritePlayers',
populate: 'playerNames'
}
}
]
});
说,我有 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
(它们的结构对于这个问题并不重要。我如何在单个[=19=中深度填充多个Client
的字段]打电话?
我尝试了什么:
Manager.find()
.populate({
path: 'users',
populate: { path: 'cars' },
populate: { path: 'houses' }
});
如果它有效(因为我覆盖了之前声明的传递给 .populate()
方法的 populate
键,我真的会感到惊讶)。我的示例显然 returns 每个用户填充 houses
字段 - 最后一个。老实说,不知道,docs 中也没有。它甚至受支持吗?根据我的示例,我知道它用于 'shallow' 填充:
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) 传递要填充的 space 分隔集合的字符串:
Manager.find()
.populate({
path : 'users',
populate: 'cars houses'
});
这是做嵌套填充的方法。在这种情况下,首先它将填充用户,然后填充用户的爱好,然后根据用户的爱好填充足球,然后它会从用户填充最喜欢的球员姓名 -> 爱好 -> 足球 -> 最喜欢的球员。
Model.find()
.populate({
path : 'users',
populate: [
{ path: 'Hobbies' },
{
path : 'Football',
populate: {
path : 'favouritePlayers',
populate: 'playerNames'
}
}
]
});