我正在尝试使用此聚合查询在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
}
谢谢
答案 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}