猫鼬多个深层人口

时间:2017-09-01 13:22:04

标签: node.js mongodb mongoose mongoose-populate

说,我有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(他们的结构对此事并不重要。如何在单{{1}中深入填充多个Client字段打电话?

我尝试了什么:

.populate()

如果它有效,它会让我感到惊讶(因为我覆盖了传递给Manager.find() .populate({ path: 'users', populate: { path: 'cars' }, populate: { path: 'houses' } }); 方法的先前声明的populate键)。我的示例显然返回每个用户填充的.populate()字段 - 最后一个字段。老实说,不知道,docs 也没有。它甚至支持吗?我知道这是为了浅薄的#39;根据我的例子填充:

houses

深层呢?

1 个答案:

答案 0 :(得分:5)

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