我试图弄清楚是否会产生聚合运算符的组合,给定类似于此的输入文档:
[
{ field1: 1, field2: 2 },
{ field1: 2, field2: 3 }
]
在具有单个数组字段的输出文档中,其元素是输入文档的字段field1
和field2
的不同值,在此示例中为:
{ result: [1,2,3] }
到目前为止我尝试过这些:
$addToSet
,但它似乎不支持多个参数,即不允许$addToSet
来自同一文档中的多个属性$project
将field1
和field2
投影到一个结果数组字段中,然后我可以$unwind
然后$addToSet
,但投影两个(或更多)数组中的属性似乎也不受支持。答案 0 :(得分:2)
您使用$addToSet走在正确的轨道上,但正如您所注意到的,您无法从多个字段创建集合。您可以使用$setUnion运算符组合多个数组。您需要在聚合管道中添加一个额外的$项目。
使用MongoDB shell:
db.coll.aggregate([
// group to create sets
{ "$group": {
"_id": null,
"a": { "$addToSet": "$a" },
"b": { "$addToSet": "$b" }
}},
// project to merge the arrays
{ "$project": {
"result": { "$setUnion": [ "$a", "$b" ] }
}}
]);