MongoDB聚合管道按组ID分组统计各状态总数无法获取正确结果
问题根因
你当前使用的$facet会对全量输入数据集执行多个独立的聚合子管道,因此你定义的passed/warnings/errors/total四个子管道统计的都是全表汇总值,和后续拆分出的JITM002分组没有关联,最终每个分组拿到的自然都是全表统计结果。
修正后的聚合管道
直接在$group阶段完成分组内的多维度统计即可,无需使用$facet:
[ { "$group": { "_id": "$JITM002", "passed": { "$sum": { "$cond": [{ "$eq": ["$JITM025", 1] }, 1, 0] } }, "warnings": { "$sum": { "$cond": [{ "$eq": ["$JITM025", 2] }, 1, 0] } }, "errors": { "$sum": { "$cond": [{ "$eq": ["$JITM025", 3] }, 1, 0] } }, "total": { "$sum": { "$cond": [{ "$gt": ["$JITM025", 0] }, 1, 0] } } } }, { "$sort": { "_id": 1 } }, { "$project": { "_id": 0, "id": "$_id", "passed": 1, "warnings": 1, "errors": 1, "total": 1 } } ]
逻辑说明
$group阶段:按JITM002字段分组,通过$cond条件判断匹配每行记录的状态值,匹配成功则累加1,直接统计出每个分组内各状态的数量和总记录数$sort阶段:按分组ID升序排序,符合你原来的排序需求$project阶段:调整输出字段格式,隐藏默认的_id字段,将分组ID映射为id字段输出
内容的提问来源于stack exchange,提问作者tfrancois
相关产品推荐
相关产品推荐

