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

MongoDB聚合查询实现各州人口最高城市统计问题求助

MongoDB按州筛选人口最多城市的聚合查询实现方案

你当前遇到的报错原因很明确:$slice是数组专属操作符,第一步分组后的_id是包含state和city两个属性的对象,自然无法执行数组切片操作。

你已经完成了第一个目标(按州+城市分组汇总城市总人口),只需要在原有聚合管道基础上新增3个阶段即可实现第二个需求,完整代码如下:

db.getCollection("codes").aggregate([
    // 阶段1:按州+城市分组,汇总每个城市的总人口
    {
        "$group": {
            "_id": {
                "state": "$state",
                "city": "$city"
            },
            "population": {
                "$sum": "$pop"
            }
        }
    },
    // 阶段2:按城市总人口降序排序,保证同州下人口越多的城市排序越靠前
    {
        "$sort": {
            "population": -1
        }
    },
    // 阶段3:按州分组,将同州所有城市的信息存入数组
    {
        "$group": {
            "_id": "$_id.state",
            "city_list": {
                "$push": {
                    "name": "$_id.city",
                    "population": "$population"
                }
            }
        }
    },
    // 阶段4:提取每个州排序后的第一个城市(即人口最多的城市),格式化输出
    {
        "$project": {
            "_id": 0,
            "state": "$_id",
            "most_populous_city": { "$first": "$city_list.name" },
            "total_population": { "$first": "$city_list.population" }
        }
    }
], {
    "allowDiskUse": false
});

如果你使用的MongoDB版本低于5.2,不支持$project阶段直接使用$first操作符,可以替换为数组取值操作符$arrayElemAt兼容旧版本,修改$project阶段如下:

{
    "$project": {
        "_id": 0,
        "state": "$_id",
        "most_populous_city": { "$arrayElemAt": ["$city_list.name", 0] },
        "total_population": { "$arrayElemAt": ["$city_list.population", 0] }
    }
}

最终输出字段包含州名、该州人口最多的城市名、对应城市总人口,和你预期的输出格式一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:06:10