如何构建聚合管道以根据其他文档中的字段值过滤文档?

时间:2020-06-13 22:05:17

标签: mongodb mongodb-query aggregation-framework

如果文档集合包含:

{ _id: "1", name : "doc1", myDocRefId : "" }
{ _id: "2", name : "doc2", myDocRefId : "" }
{ _id: "3", name : "doc3", myDocRefId : "1" } 

我想构造一个聚合,该聚合只返回通过myDocRefId字段被其他任何文档引用的文档。对于这个集合,我想返回:

{ _id: "2", name : "doc2", myDocRefId : "" }
{ _id: "3", name : "doc3", myDocRefId : "1" }

在汇总中删除了文档1,因为文档3引用了它。

这如何在聚合管道中完成?

1 个答案:

答案 0 :(得分:1)

尝试这个:

db.collection.aggregate([
  {
    $lookup: {
      from: "collection",
      localField: "_id",
      foreignField: "myDocRefId",
      as: "tmp"
    }
  },
  {
    $match: {
      tmp: {
        $size: 0
      }
    }
  },
  {
    $unset: "tmp"
  }
])

MongoPlayground | $graphLookup