MongoDB的:通过使用
问题描述:
集团
获取值的列表我有一个名为contract
收集和我想group using "a_id"
MongoDB的:通过使用
{
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日志显示我的列表名字,我怎样才能纠正这个?
固定
db.contract.group({
key:{a_id: 1},
initial: {v: []},
reduce: function(obj, prev){
prev.v.push(obj.name)
}
});
答
固定
db.contract.group({
key:{a_id: 1},
initial: {v: []},
reduce: function(obj, prev){
prev.v.push(obj.name)
}
});
答
您还可以使用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'}}})