wsc*_*rge 5 mongoose mongodb node.js mongoose-populate
说,我有Manager架构:
{
name: { type: String },
clients: [{ type: Mongoose.Schema.ObjectId, ref: 'Client'}]
}
Run Code Online (Sandbox Code Playgroud)
而且,我有Client架构:
{
name : { type String },
cars : [{ type: Mongoose.Schema.ObjectId, ref: 'Car' }],
houses: [{ type: Mongoose.Schema.ObjectId, ref: 'House' }]
}
Run Code Online (Sandbox Code Playgroud)
而且Car,House(它们的结构对此并不重要。如何Client在单个.populate()调用中深度填充多个字段?
我尝试了什么:
Manager.find()
.populate({
path: 'users',
populate: { path: 'cars' },
populate: { path: 'houses' }
});
Run Code Online (Sandbox Code Playgroud)
如果它奏效的话,这会让我真正感到惊讶(因为我覆盖了之前声明的populate传递给.populate()方法的键)。我的示例显然返回了houses每个用户的填充字段-最后一个。老实说,不知道,文档中也没有。甚至支持吗?根据我的示例,我知道它是针对“浅”填充的:
User.populate('cars')
.populate('houses')
Run Code Online (Sandbox Code Playgroud)
那深渊呢?
1)传递具有要填充属性的对象数组:
Manager.find()
.populate({
path : 'users',
populate: [
{ path: 'cars' },
{ path: 'houses' }
]
});
Run Code Online (Sandbox Code Playgroud)
该解决方案可以充分利用深度填充。考虑:
Manager.find()
.populate({
path : 'users',
populate: [
{ path: 'cars' },
{
path : 'houses',
populate: {
path : 'rooms',
populate: 'windows'
}
}
]
});
Run Code Online (Sandbox Code Playgroud)
2)传递以空格分隔的集合的字符串以进行填充:
Manager.find()
.populate({
path : 'users',
populate: 'cars houses'
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2842 次 |
| 最近记录: |