MongoDB统计各品牌不同RAM容量数量及总数量聚合问题咨询
你只需要对现有聚合逻辑做2处调整即可实现需求:
- 第一步在第一个
$project阶段保留每个RAM分组的计数cnt字段,用于后续统计品牌总设备数 - 第二步在按品牌分组的
$group阶段新增sum字段,累加同品牌下所有RAM分组的计数得到总设备数
修改后的完整聚合代码
db.b.aggregate([ // 按品牌+RAM分组,统计单品牌对应RAM容量的设备数量 {$group:{ _id:{ r:"$ram" ,b:"$brand"}, cnt:{$sum:1} }}, // 保留cnt字段,用于后续求和 {$project:{ a:[{k:"$_id.r" ,v:"$cnt"}] , brand:"$_id.b" , cnt: 1, _id:0}}, {$project:{d:{$arrayToObject:"$a"} ,brand:1, cnt:1 }}, // 新增sum字段,累加同品牌所有RAM分组的计数得到总设备数 {$group:{ _id:"$brand", ram:{$push:"$d"}, sum: {$sum: "$cnt"} }}, {$project:{_id:0,brand:"$_id" ,"options": { $mergeObjects: "$ram" }, sum: 1 }}, {$replaceRoot: { newRoot: { $mergeObjects: ["$$ROOT", "$options"] }}}, {$project:{options:0}} ])
运行输出结果
{ "brand" : "6178524a5ff14e633aeff1ea", "4gb" : 1, "8gb" : 1, "sum" : 2 } { "brand" : "sony", "16gb" : 2, "8gb" : 1 , "sum" : 3}
内容的提问来源于stack exchange,提问作者SpawN
相关产品推荐
相关产品推荐

