我有以下对象:
{
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
组的任何对象的值。
答案 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
}
}
])