我有一个名为contract
的集合,我想group using "a_id"
{
a_id: 1,
"name": "n1"
}
{
a_id: 2,
"name": "n2"
}
{
a_id: 1,
"name": "n3"
}
{
a_id: 1,
"name": "n4"
}
{
a_id: 2,
"name": "n5"
}
我希望group by "a_id"
向我显示相关名称列表。
{
a_id: 1,
values: ["n1", "n3", "n4"]
}
{
a_id: 2,
values: ["n2", "n5"]
}
我的代码:
db.contract.group({
key:{a_id: 1},
initial: {v: ''},
reduce: function(doc, obj){
v = v + " " + obj.name
}
});
我的输出:
{
"a_id" : 1,
"v" : ""
},
{
"asset_id" : 2,
"v" : ""
}
这不会返回值列表,但 mongd logs 会显示名称列表,如何更正?
已修复
db.contract.group({
key:{a_id: 1},
initial: {v: []},
reduce: function(obj, prev){
prev.v.push(obj.name)
}
});
答案 0 :(得分:9)
您也可以使用MongoDB's aggregation framework:
以下内容完全相同:
db.contract.aggregate({$group: { '_id': '$a_id', 'name': { $push: '$name'}}})
以下内容仅在结果集中放置一次唯一值(如果每个'a_id'有重复的名称):
db.contract.aggregate({$group: { '_id': '$a_id', 'name': { $addToSet: '$name'}}})
答案 1 :(得分:1)
已修复
db.contract.group({
key:{a_id: 1},
initial: {v: []},
reduce: function(obj, prev){
prev.v.push(obj.name)
}
});