猫鼬先填充,然后根据填充的字段进行过滤

Mongoose populate first and then filter based on populated field

我有两个 collection(itemssubitems)。 items collection 在 subItems 属性 中有一个 object 对子项 collection 的引用(这是一个子项 ObjectId 数组)。

我想构建一个查询,我可以先填充 subItems,然后根据填充的字段进行过滤。我尝试了 运行 下面的查询,但似乎填充是最后 运行,因此 subItems[0].sharedGroups.groupId 永远无法正确过滤,因为它尚未填充。

db.items.find({
        $or: [
          { 'owner': 1 },
          { 'subItems[0].sharedGroups.groupId': { $in: [3691] } },
        ]
}).populate('subItems');

你应该使用 $lookup 然后 $match 像这样聚合

db.items.aggregate([
  {
    $lookup:{
      from:"subItems",
      localField:"subItems", // field of reference to subItem
      foreignField:"_id",
      as :"subItems"
    }},
  {
    $match:
        {
          $or: [
            { 'owner': 1 },
            { 'subItems.sharedGroups.groupId': { $in: [3691] } },
          ]
        }
  }]
  )