如何在 MongoDB 聚合中合并来自多个文档的数组而不重复?

How do I merge arrays from multiple documents without duplicates in MongoDB aggregation?

我有 3 个文档:

{
  "id": 1,
  "user": "Brian1",
  "configs": [
    "a",
    "b",
    "c",
    "d"
  ]
}

----

{
  "id": 2,
  "user": "max_en",
  "configs": [
    "a",
    "h",
    "i",
    "j"
  ]
}

----

----

{
  "id": 3,
  "user": "userX",
  "configs": [
    "t",
    "u",
    "s",
    "b"
  ]
}

我想将所有“configs”数组合并成一个数组而不重复,像这样:

{
"configs": [
  "a",
  "b",
  "c",
  "d",
  "h",
  "i",
  "j",
  "t",
  "u",
  "s",
  ]
}

我试过以下方法:

Aggregation.group("").addToSet("configs").as("configs"){ _id: "", 'configs': { $addToSet: '$configs' } }

第一个给出错误,因为我将字段名留空(我不知道该放什么)。

第二个 returns 一个合并的数组,但有重复项。

当你想对所有文档进行分组时,需要添加{_id: null}

表示对所有文档进行分组。

可能你需要this

db.collection.aggregate([
  {
    "$unwind": "$configs"
  },
  {
    $group: {
      _id: null,
      configs: {
        "$addToSet": "$configs"
      }
    }
  }
])

但是当你需要在没有匹配的更大的集合上使用时要小心。