如何使用MongoDB统计交易状态为S的去重客户总数量?
MongoDB 按规则实现客户总数统计
核心统计规则
需要完成的统计逻辑完全匹配业务要求:
- 先做记录筛选:仅保留
transactions_status字段值等于"S"的数据 - 再做客户去重:以
email_address字段作为客户唯一标识,同一邮箱不重复计数 - 最终输出固定结构的统计结果,无额外分组维度
预期返回结构示例:
{ "_id": null, "count": "经筛选、去重后的客户总数量" }
聚合查询实现
采用MongoDB原生聚合管道完成计算,按照"先过滤减少数据量、再去重、最后计数"的顺序编排流程,尽可能降低查询的性能消耗:
- 第一阶段匹配过滤:用
$match算子筛选出所有交易状态为S的文档,避免全量数据参与后续计算 - 第二阶段分组去重:以
email_address作为分组键执行首次分组,每个唯一邮箱对应一个分组,实现天然去重效果 - 第三阶段总计数统计:对去重后的分组集合做二次聚合,固定
_id为null,统计分组总个数作为最终的客户总量
可直接替换集合名运行的查询代码:
db.你的业务集合名.aggregate([ // 筛选状态为S的记录 { $match: { transactions_status: "S" } }, // 按邮箱去重 { $group: { _id: "$email_address" } }, // 统计去重后的总客户数 { $group: { _id: null, count: { $sum: 1 } } } ])
性能优化参考
当集合数据量达到百万级以上时,建议在 transactions_status、email_address 两个字段上建立联合索引,聚合查询可直接通过索引获取目标数据,无需扫描全表,能大幅缩短查询响应时间。
内容的提问来源于stack exchange,提问作者Manfred Tijerino
相关产品推荐
相关产品推荐

