You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB聚合查询纽约州各城市全部邮政编码及总人口问题求助

问题根因

你当前查询结果异常的核心原因是聚合管道最后一步的$group阶段错误使用了$last操作符,该操作符只会提取分组后的最后一条文档数据,自然会丢失同一个城市其他邮政编码的信息。同时原有管道先全量分组再过滤的写法性能较差,可直接优化为单次分组逻辑。

修正后的查询语句

db.getCollection('codes').aggregate([
    // 第一步先过滤纽约州数据,大幅降低后续阶段的处理数据量
    {
        $match: {
            "state": "NY"
        }
    },
    // 直接按城市分组完成统计
    {
        $group: {
            _id: "$city",
            population: { $sum: "$pop" },
            postal_codes: { $addToSet: "$_id" }
        }
    },
    // 可选:按城市名称字母排序,不需要可直接删除该阶段
    {
        $sort: {
            _id: 1
        }
    }
])

逻辑说明

  1. 先执行$match过滤掉非纽约州的所有文档,避免无效计算
  2. 按城市字段直接分组:
    • 用$sum累加该城市所有邮编对应的人口,得到城市总人口
    • 用$addToSet收集该城市所有的邮编值(因为邮编是文档唯一_id,不会重复,也可以用$push替代)
  3. 可选的排序阶段可以让输出结果按城市名称有序展示

如果一定要保留你原有两步分组的写法,只需要把最后一步$group的操作符修改为:人口用$sum累加、邮编数组用$push收集后再展开即可,但完全没必要多做一次分组,上述优化后的写法执行效率更高。


内容的提问来源于stack exchange,提问作者com_thit_nuong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:36:03