如何将项目分组到mongodb中的对象?

时间:2015-05-03 21:39:18

标签: mongodb aggregation-framework

我正在尝试使用此聚合查询在mongodb中执行简单的GROUP BY / COUNT:

{
  $match:{
    'os':7
  }
},
{
  $group : {
    _id:"$status", 
    count:{$sum:1}
  }
},
{
  $project:{
    count:1,
    status:1
  }
}

它返回一个像这样的数组

[{ "_id" : "ENC", "count" : 18 }
{ "_id" : "INT", "count" : 363 }
{ "_id" : "ANN", "count" : 132 }]

有没有办法将结果投影到对象中,使用分组字段作为键? 例如:

{
   ENC:18, 
   INT:363, 
   ANN:132
}

谢谢

1 个答案:

答案 0 :(得分:1)

我不认为MongoDB的聚合框架具有可以将字段值转换为键的$project操作。您可以尝试使用forEach()光标方法转换聚合结果,以迭代投影字段,并在结果对象上使用JavaScript的 bracket-notation ,然后创建所需的最终结果对象:

var result = [
    { "_id" : "ENC", "count" : 18 },
    { "_id" : "INT", "count" : 363 },
    { "_id" : "ANN", "count" : 132 }
];
var obj = {};
result.forEach(function (doc){
    obj[doc._id] = doc.count;
});
printjson(obj); // {ENC: 18, INT: 363, ANN: 132}