2011-11-17 173 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'}}})