在MongoDB中查找其他集合中不存在字段值的文档

时间:2021-07-29 19:12:39

标签: mongodb realm nosql-aggregation

我的子文档在父 userFolder 被删除时无法存档。 来自子文档的链接设置为“组”字段,这是其父文档的 objectID 的字符串版本。

如何进行聚合,以便为我提供在 userFolder 集合的 objectID 中找不到“组”值的文档列表

1 个答案:

答案 0 :(得分:1)

这样的事情应该可行,您需要根据需要替换集合和字段名称:

db.child_collection.aggregate([
  {
    $lookup: {
      from: "parent_collection",
      let: {
        parent_group: {
          $toObjectId: "$group"
        }
      },
      pipeline: [
        {
          $match: {
            $expr: {
              $eq: [
                "$_id",
                "$$parent_group"
              ]
            }
          }
        }
      ],
      as: "parent_docs"
    }
  },
  {
    $match: {
      "parent_docs": {
        $size: 0
      }
    }
  }
])

$lookup stage 之后,每个文档都会有一个 parent_docs 数组。如果子文档具有未删除的父文档,则该数组将具有一个元素。否则它是孤立的,数组将为空。您对查找孤立文档感兴趣,因此我们过滤大小为 0 的数组。

Working Mongo Playground