MongoDB聚合查询无法对指定州的城市字段去重问题排查
MongoDB指定州唯一城市查询解决方案
现有查询问题说明
你当前使用的聚合语句中$addToSet: "$city"本身可以生成去重的城市集合,但count: {$sum: 1}统计的是纽约州所有邮编条目的总数量,而非去重后的城市总数。如果需要更精准的获取唯一城市列表、配套正确的去重计数,可以使用以下优化方案:
注意:如果实际查询中仍存在看起来重复的城市条目,需检查city字段是否存在大小写差异、前后空格等隐性字符,可在查询中先对city字段做格式化处理,避免隐性字符导致的去重失效。
方案1:轻量化查询(仅需唯一城市列表)
直接使用MongoDB内置的distinct方法,一步返回去重后的城市数组:db.zipcodes.distinct("city", {state: "NY"})
方案2:聚合查询(同时获取唯一城市列表+去重城市总数)
如需同时统计去重后的城市数量,调整聚合逻辑如下:
db.zipcodes.aggregate([ // 筛选纽约州的所有条目 {$match:{state:"NY"}}, // 可选:对city字段做格式化,避免隐性字符导致去重失效 {$project: { city: {$trim: {$toLower: "$city"}}, state: 1 }}, // 按城市分组,天然过滤重复城市 {$group:{_id: "$city"}}, // 汇总所有唯一城市并统计数量 {$group:{ _id: null, uniqueCityList: {$addToSet: "$_id"}, uniqueCityTotal: {$sum: 1} }} ])
参考数据集

内容的提问来源于stack exchange,提问作者Waqar
相关产品推荐
相关产品推荐

