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

标签 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
}

谢谢

最佳答案

我觉得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}

关于mongodb - 如何在 mongodb 中将项目分组到对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30019722/

相关文章:

javascript - 在 JavaScript 中将 ObjectID (Mongodb) 转换为字符串

mongodb - 如何使用 Mongodb 按选定属性(嵌套)计算对象数量

mongodb 单个操作中的多个聚合

java - Spring data util对重命名json名称

node.js - 在多个集合中搜索 mongoose

javascript - Mongoose TypeScript ObjectId 转换 - 类型 'string' 不可分配给类型 'Condition<ObjectId | undefined>'

java - java中从mongodb中提取的3个值的乘法

java - MongoDB 查询执行时间过长

javascript - 链接 2 个 Mongoose 模式

MongoDB > 从嵌套数组中提取集合