MongoDB如何按指定字段分组并统计对应分组的记录数量
MongoDB按多字段分组统计去重记录数的实现方法
你需要使用MongoDB的**聚合管道(Aggregation Pipeline)**实现需求,核心用到$group分组阶段,按emp_country和emp_city两个字段的组合作为分组键,统计每组的记录数即可。
场景1:集合中emp_id全局唯一(无重复值)
如果同分组下不会出现重复的emp_id,可以直接用如下查询,性能更高:
// 请将collectionName替换为你实际的集合名称 db.collectionName.aggregate([ { $group: { _id: { emp_country: "$emp_country", emp_city: "$emp_city" }, count: { $sum: 1 } } }, { // 调整输出字段结构,匹配预期格式 $project: { _id: 0, emp_country: "$_id.emp_country", emp_city: "$_id.emp_city", count: 1 } } ])
场景2:集合中存在重复emp_id需要去重统计
如果同分组下可能有重复的emp_id,需要先对emp_id去重再统计数量:
// 请将collectionName替换为你实际的集合名称 db.collectionName.aggregate([ { $group: { _id: { emp_country: "$emp_country", emp_city: "$emp_city" }, // 存储当前分组下所有去重的emp_id distinctEmpIds: { $addToSet: "$emp_id" } } }, { $project: { _id: 0, emp_country: "$_id.emp_country", emp_city: "$_id.emp_city", // 取去重后emp_id数组的长度作为统计值 count: { $size: "$distinctEmpIds" } } } ])
上述两种查询的输出结果完全匹配你给出的预期格式。
内容的提问来源于stack exchange,提问作者prabhakar srivastava
相关产品推荐
相关产品推荐

