使用MongoDB聚合将来自不同属性的值合并为单个数组

时间:2014-07-26 08:41:35

标签: mongodb

我试图弄清楚是否会产生聚合运算符的组合,给定类似于此的输入文档:

[
 { field1: 1, field2: 2 },
 { field1: 2, field2: 3 }
]

在具有单个数组字段的输出文档中,其元素是输入文档的字段field1field2的不同值,在此示例中为:

{ result: [1,2,3] }

到目前为止我尝试过这些:

  • $addToSet,但它似乎不支持多个参数,即不允许$addToSet来自同一文档中的多个属性
  • $projectfield1field2投影到一个结果数组字段中,然后我可以$unwind然后$addToSet,但投影两个(或更多)数组中的属性似乎也不受支持。

1 个答案:

答案 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" ] }
    }}
]);