MongoDB聚合分组求和报population未定义错误如何解决
报错原因
- 字段引用不符合语法规则:聚合管道中引用文档字段时,必须使用
$字段名的字符串格式,你写的$population未加引号包裹,MongoDB会将其识别为未定义的JavaScript变量,直接抛出population not defined错误。 $group阶段结构错误:$group必须通过_id字段指定分组依据,不能直接自定义普通键作为分组条件。- 缺少匹配筛选步骤:要统计欧洲总人口,需要先过滤出所有归属欧洲的国家记录,否则会统计到全集合所有国家的人口总和。
正确实现语句
统计全欧洲总人口
不需要拆分次区域的场景下,将分组_id设为null,把所有匹配到的欧洲国家归为同一组求和即可:
db.landen.aggregate([ { // 筛选所有欧洲国家 $match: { region: "Europe" } }, { $group: { _id: null, totalPopulation: { $sum: "$population" // 字段路径必须为带$前缀的字符串 } } } ])
如果你实际需求是统计东欧区域的总人口,只需要把
$match的条件替换为subregion: "Eastern Europe"即可。
按欧洲次区域分别统计人口
如果需要拆分东欧、西欧、南欧等次区域分别统计人口,把分组_id指向次区域字段即可:
db.landen.aggregate([ { $match: { region: "Europe" } }, { $group: { _id: "$subregion", subregionPopulation: { $sum: "$population" } } } ])
返回结果示例
全欧洲总人口统计的返回结构如下,totalPopulation字段就是最终统计值:
[ { "_id": null, "totalPopulation": 746389000 } ]
内容的提问来源于stack exchange,提问作者Ruuf
相关产品推荐
相关产品推荐

