MongoDB 查找连接数组

MongoDB find join array

我有一个集合,其中的数据看起来有点像这样

{
  "part": [
    { "a": "1", "b": "a" },
    { "a": "23", "b": "b" },
    { "a": "4", "b": "c" },
  ]
}

我想要一种搜索​​文档的方法,其中所有 a 部分的连接等于我要查找的搜索。

例如 1234 应该匹配上面的文档,但是 124 不应该。

MongoDB 这可能吗?

您可以使用 $reduce 的聚合来连接字符串,然后 $match 来过滤您的字符串。
这是 playground.

您可以使用聚合框架来完成:

  • $match with $eq - 仅过滤 part 数组的串联 a 属性的文档等于输入字符串。
  • $reduce$concat - 连接每个文档的 part 数组的所有 a 属性.
db.collection.aggregate([
  {
    "$match": {
      "$expr": {
        "$eq": [
          "1234",
          {
            "$reduce": {
              "input": "$part",
              "initialValue": "",
              "in": {
                "$concat": [
                  "$$value",
                  "$$this.a"
                ]
              }
            }
          }
        ]
      }
    }
  }
])

Working example