MongoDB 根据文档值而不是显式条件匹配数组

MongoDB match array based on document value rather than explicit condition

假设我有以下文档结构:

{
  "A": {
    "_id": "ID0"
  },
  "B": [
    {
      "_id": "ID0",
      "field": "X"
    },
    {
      "_id": "ID1",
      "field": "Y"
    }
  ]
}

我想投影 BA 中的 _id 匹配。最终结果将是:

{
  "B": [
    {
      "_id": "ID0",
      "field": "X"
    }
  ]
}

我尝试了以下方法,但显然我做错了什么。是否可以根据提交的文件而不是明确的条件进行匹配?

db.collection.aggregate([
  {$match: {"B._id": "$A._id"}},
  {$project: {"B": 1}}
])

您可以使用 $filter 聚合运算符来实现此目的:

db.collection.aggregate([
  {
    $addFields: {
      "B": {
        $filter: {
          input: "$B",
          as: "arr",
          cond: {
            $eq: [
              "$A._id",
              "$$arr._id"
            ]
          }
        }
      }
    }
  }
])

测试一下here