是否有可能在mongoose populate

时间:2016-10-31 09:13:21

标签: node.js mongodb mongoose mongoose-populate

我在一个集合中有一个名为 services 的子文档,它包含 serviceID type serviceID 引用两个集合 internalservice externalservice 根据类型字段而有所不同。

internalServices:[{
           serviceID:ObjectId('0000000000000'),
           serviceDesc:'sweeping'
         },
         {
           serviceID:ObjectId('0000000000000'),
           serviceDesc:'floor cleaning'
         }]


 externalServices:[{
               serviceID:ObjectId('0000000000000'),
               serviceDesc:'painting'
             },
             {
               serviceID:ObjectId('0000000000000'),
               serviceDesc:'white washing'
             }]

以上两个是查找集合。这里是公司集合

   _id:"xxxxxxxxxxxxxxxx",
   name: 'xxxx',
   Address:'xxx',

    services:[{
           serviceID:ObjectId('0000000000000'),
           type: internalservice
         },
         {
           serviceID:ObjectId('0000000000000'),
           type: externalservice
         }]

在这里,我想根据类型填充服务描述。

是否有可能在填充条件路径?

这是我的代码

Company.findOne({"_id": mongoose.Types.ObjectId(req.params.companyID)},
                {})
             .populate('services.serviceID','serviceDesc','InternalService')
             .exec(function (err, companyInfo) {

               console.log(companyInfo);
             });

这会填充内部服务说明,但我需要填写类型externalservice的外部服务说明。当我有两个填充时,第二个填充将替换为null的结果替换为不匹配的文档。

1 个答案:

答案 0 :(得分:0)

您可以在填充where条件中加入:

Story
.find(...)
.populate({
  path: 'fans',
  match: { age: { $gte: 21 }},
  select: 'name -_id',
  options: { limit: 5 }
})
.exec()

Here is the Mongoose Populate Documentation