我试图弄清楚如果输入文档与此类似,是否会产生聚合运算符的组合:
[
{ field1: 1, field2: 2 },
{ field1: 2, field2: 3 }
]
在具有单个数组字段的输出文档中,其元素是字段 field1
的不同值和field2
输入文档的数量,在此示例中:
{ result: [1,2,3] }
到目前为止我尝试过这些:
-
$addToSet
,但它似乎不支持多个参数,即不允许$addToSet
来自同一文档中的多个属性 -
$project
到项目field1
和field2
进入结果数组字段,然后我可以$unwind
然后$addToSet
,但似乎也不支持将两个(或更多)属性投影到数组中。
最佳答案
您的方向是正确的 $addToSet ,但正如您所注意到的,您无法从多个字段创建一个集合。您可以使用 $setUnion 组合多个数组运算符(operator)。您需要在聚合管道中添加一个额外的 $project。
使用 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" ] }
}}
]);
关于mongodb - 使用 MongoDB 聚合将不同属性的值合并到单个数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24969195/