选择2个字段并返回带有不同值的已排序数组

Sbi*_*dan 5 mongodb mongodb-query aggregation-framework

假设我们有以下文档:

{a: 1, b: 2},
{a: 2, b: 0},
{a: 3, b: 1}
Run Code Online (Sandbox Code Playgroud)

我想要一个将返回的查询:

[0, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法比这更快地做到这一点:

  • 只做2个查询,一个选择a,另一个选择b然后在我的应用程序中合并.
  • 使用map reduce(与之前的方法相比,这是非常缓慢的)

sty*_*ane 4

您需要$group我们的文档并使用$push累加器运算符来返回集合内的“a”和“b”数组。

$project运算符中,您可以使用$setUnion运算符来过滤掉重复项。

db.coll.aggregate(
    [
        { "$group": { 
            "_id": null, 
            "a": { "$push": "$a" }, 
            "b": { "$push": "$b" } 
        }}, 
        { "$project": {
            "_id": 0, 
            "merged": { "$setUnion": [ "$a", "$b" ] } 
        }} 
    ]
)
Run Code Online (Sandbox Code Playgroud)

其产生:

{ "merged" : [ 3, 2, 0, 1 ] }
Run Code Online (Sandbox Code Playgroud)