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

Mongodb 如何构造聚合管道以根据其他文档中的字段值过滤文档?,mongodb,mongodb-query,aggregation-framework,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: "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引用了它

如何在聚合管道中实现这一点?

试试这个:

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