填充obj数组的字段查找

问题描述

Element内,我有一个associations的数组,这些关联是一个集合。

此集合obj由许多键组成,这些键中有一些元素引用其他集合(objobj2),我想填充这两个集合。

但是我什至无法尝试执行尽可能少的操作,我也无法理解它。

据我了解,也许您需要使用$unwind

元素:

{
_id: "",element: "",associations: [],updatedAt: "",createdAt: ""
}

协会:

{
_id: "",code: "",obj: "5s5s55s5d555dff",//populate - Schema.Types.ObjectId - ref: 'objGroup'
obj2: "5f5e5e5e5d5d5d5",//populate - Schema.Types.ObjectId - ref: 'obj2Group'
updatedAt: "",createdAt: ""
}

在元素中:

aggregate.push({
    $lookup: {
      from: 'associations',let: { cId: '$_id' },pipeline: [
        { $match: { $expr: { $eq: ['$code','$$cId'] } } },{ $match: { $or: getTimeRange(from,to) } }
      ],as: 'associations'
    }
  })

解决方法

您可以在查找管道中使用嵌套查找,

db.element.aggregate([
  {
    $lookup: {
      from: "associations",let: { cId: "$_id" },pipeline: [
        { $match: { $expr: { $eq: ["$code","$$cId"] } } },{ $match: { $or: getTimeRange(from,to) } },{
          $lookup: {
            from: "objCollection",localField: "obj",foreignField: "_id",as: "obj"
          }
        },{ $unwind: "$obj" },{
          $lookup: {
            from: "obj2Collection",localField: "obj2",as: "obj2"
          }
        },{ $unwind: "$obj2" }
      ],as: "associations"
    }
  }
])