匹配 MongoDB 中的键

match the key in MongoDB

我想$match中一个mongoDB,文档数以千计,所以求动态sol:

$doc.k 等于 $info.data.kk$match 之后我们有一个文档只包含 $matchs 的信息,请参阅 预期输出文档,如果您有任何问题,请告诉我。

[
{
  "doc": {
    "k": "ABC",
    "v": {
      "sec": 0
    }
  },
  "info": [
    {
      "data": [
        {
          "k": "XYZ",
          "v": {
            "know": "alpha"
          }
        },
        {
          "k": "ABC",
          "v": {
            "know": "alpha"
          }
        }
      ]
    }
  ]
}
]

预期的输出文件看起来像

[
{
    "doc": {
      "k": "ABC",
      "v": {
        "sec": 0
      }
    },
    "info": [
      {
        "data": [
          {
            "k": "ABC",
            "v": {
              "know": "alpha"
            }
          }
        ]
      }
    ]
  }
]
  1. $set - 更新 info 字段。

    1.1。 $map - 由于 info 是一个数组,需要迭代 info 数组中的每个文档和 return 一个新数组。

    1.1.1。 $filter - 按 doc.k 和当前迭代 k 值过滤文档。

db.collection.aggregate([
  {
    $set: {
      info: {
        $map: {
          input: "$info",
          in: {
            data: {
              $filter: {
                input: "$$this.data",
                cond: {
                  $eq: [
                    "$doc.k",
                    "$$this.k"
                  ]
                }
              }
            }
          }
        }
      }
    }
  }
])

Sample Mongo Playground