MongoDB:如何通过数组值group/transpose

MongoDB: How to group/transpose by array values

我有一个非常简单的集合,其中包含这样的文档:

{
  _id: 42,
  array: ["foo", "bar", "baz"]
}

我正在寻找可以按数组值分组并生成以下结果的查询(聚合):

[
  {
    _id: "foo",
    matchingDocs: [
      {
        _id: 42,
        array: ["foo", "bar", "baz"]
      },
      { ... }
    ]
  }
]

您需要 $unwind and $group,其中 $$ROOT 推荐当前正在处理的整个文档。在执行此操作之前,您需要添加另一个数组,以便在最终结果中获得原始展开的数组:

db.collection.aggregate([
    {
        $addFields: { arr: "$array" }
    },
    {
        $unwind: "$arr"
    },
    {
        $group: {
            _id: "$arr",
            matchingDocs: { $push: "$$ROOT" }
        }
    },
    {
        $project: {
            "matchingDocs.arr": 0
        }
    }
])

Mongo Playground