如何在Python的MongoDB聚合中合并统计单字段多值分组文档数
合并MongoDB聚合管道实现分组统计
嗨,我来帮你把两个分开的聚合管道合并成一个更简洁高效的版本!你不需要分两次查询,直接在单个$group阶段里就能完成两种状态的统计。
完整聚合管道
[ { "$group": { "_id": "$website", "edited_count": { "$sum": { "$cond": [{"$eq": ["$isEdited", "true"]}, 1, 0] } }, "not_edited_count": { "$sum": { "$cond": [ {"$or": [ {"$eq": ["$isEdited", "false"]}, {"$eq": ["$isEdited", null]} ]}, 1, 0 ] } } } } ]
关键逻辑解释
- 无需提前
$match筛选:我们直接在分组阶段对每个文档的isEdited字段进行判断,避免了两次遍历集合的额外开销。 $cond条件累加:- 对于
edited_count:当isEdited等于"true"时,累加1,否则累加0。 - 对于
not_edited_count:判断isEdited是"false"或者字段不存在(对应MongoDB中的null),满足任一条件就累加1,否则累加0。
- 对于
预期输出结果
运行这个管道后,你会得到符合需求的合并统计结果:
[ {"_id": "website_1", "edited_count": 2, "not_edited_count": 0}, {"_id": "website_2", "edited_count": 0, "not_edited_count": 1}, {"_id": "website_3", "edited_count": 0, "not_edited_count": 1} ]
内容的提问来源于stack exchange,提问作者Tony Stark
相关产品推荐
相关产品推荐

