2011-11-17 69 views
2
集团

获取值的列表我有一个名为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) 
    } 
}); 

回答

1

固定

db.contract.group({ 
    key:{a_id: 1}, 
    initial: {v: []}, 
    reduce: function(obj, prev){ 
     prev.v.push(obj.name) 
    } 
}); 
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'}}})