MongoDB聚合分组结果重构X/Y/Z统计值为指定数组结构问题
MongoDB聚合二次重构字段解决方案
你不需要使用$push,该运算符适用于多文档分组时收集值的场景,你当前是单条文档内部构造固定结构数组,直接在$group后追加$project阶段即可,写法如下:
// 你原有$group阶段代码保持不变 { $group: { _id: { level: "$level" }, X: { $sum: "xxx" }, // 替换为你原有X的统计逻辑 Y: { $sum: "xxx" }, // 替换为你原有Y的统计逻辑 Z: { $sum: "xxx" }, // 替换为你原有Z的统计逻辑 count: { $sum: 1 } } }, // 新增$project阶段完成结构重构 { $project: { _id: 0, level: "$_id.level", range: [ { dir: "X", count: "$X" }, { dir: "Y", count: "$Y" }, { dir: "Z", count: "$Z" } ] } }
上述写法兼容MongoDB 3.2及以上版本,最终输出的文档结构完全符合要求:每个文档仅包含level字段和结构匹配的range数组。
如果需要兼容更老的MongoDB版本,可以替换为$concatArrays写法,逻辑和最终效果完全一致:
{ $project: { _id: 0, level: "$_id.level", range: { $concatArrays: [ [{ dir: "X", count: "$X" }], [{ dir: "Y", count: "$Y" }], [{ dir: "Z", count: "$Z" }] ] } } }
内容的提问来源于stack exchange,提问作者Suresh Kumar
相关产品推荐
相关产品推荐

