如何在 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"
}
}
}
])
但是当你需要在没有匹配的更大的集合上使用时要小心。
我有 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"
}
}
}
])
但是当你需要在没有匹配的更大的集合上使用时要小心。