db.collection.group - 显示其他属性

时间:2017-02-21 11:36:13

标签: mongodb mongodb-query

我有以下对象:

{
 foo: "A",
 bar: "Alpha"
},
{
 foo: "A",
 bar: "Alphabet"
},
{
 foo: "B",
 bar: "Beta"
}

我正在使用此查询:

db.collectionName.group({
  key:{foo: 1}, 
  reduce: function(curr, result){}, 
  initial: {}
})

foo字段对它们进行分组。它返回如下对象:

{
  foo: "A"
},
{
  foo: "B"
}

然而我希望它们显示如下:

{
 foo: "A",
 bar: "Alpha"
},
{
 foo: "B",
 bar: "Beta"
}

bar中显示哪个值并不重要,但我需要任何值。如果我还要为bar属性对象的key参数添加group,我会获得许多重复项,但我只需要foo字段的唯一身份,而{{{ 1}}可以是匹配bar组的任何对象的值。

1 个答案:

答案 0 :(得分:2)

db.collection.aggregate() $group 阶段一起使用为:

db.collectionName.aggregate([
    {
        "$group": {
            "_id": "$foo",
            "bar": { "$first": "$bar" }
        }
    }
])

要获得准确的输出,请按下另一个 $project 管道阶段,将最终输出格式化为:

db.collectionName.aggregate([
    {
        "$group": {
            "_id": "$foo",
            "bar": { "$first": "$bar" }
        }
    },
    {
        "$project": {
            "_id": 0,
            "foo": "$_id",
            "bar": 1
        }
    }
])