MongoDB聚合查询实现:将success状态单独分组,其余状态合并统计
MongoDB聚合查询:拆分success与其他状态统计
针对你的需求,我们可以通过MongoDB的聚合管道实现,核心思路是先统一非success状态的标识,再按应用和状态分组求和。
完整聚合查询代码
db.yourCollectionName.aggregate([ // 统一非success状态的标识为'failed' { $project: { app: 1, count: 1, status: { $cond: { if: { $eq: ["$status", "success"] }, then: "$status", else: "failed" } } } }, // 按app和处理后的status分组,累加count { $group: { _id: { app: "$app", status: "$status" }, totalCount: { $sum: "$count" } } }, // 整理成目标输出格式 { $project: { _id: 0, app: "$_id.app", status: "$_id.status", count: "$totalCount" } }, // 可选:按app和status排序,让结果更规整 { $sort: { app: 1, status: 1 } } ])
各阶段说明
- $project阶段:用
$cond条件判断,将所有非"success"的状态统一替换为"failed",同时保留app和count字段。 - $group阶段:以
app和处理后的status作为分组依据,用$sum累加每组的count值。 - $project阶段:重新调整输出结构,去掉自动生成的
_id字段,把分组数据映射成你需要的格式。 - $sort阶段:可选步骤,按app升序、status升序排列结果,方便查看。
注意事项
- 替换代码里的
yourCollectionName为你实际的集合名称。 - 完全适配“每个应用不一定包含全部状态”的场景:如果某个app没有success状态,结果只会出现该app的failed组;如果只有success状态,只会出现success组。
内容的提问来源于stack exchange,提问作者Kanojian
相关产品推荐
相关产品推荐

