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

MongoDB与Python聚合脚本报错:departure_airport需为累加器对象

问题

需要对MongoDB中名为flight_data的集合进行数据聚合处理,该集合包含航班号、起降机场、油耗、飞行距离等航班信息,文档结构示例如下:

{
    "_id": ObjectId("3f94fb7faff0b71ae5e3cb8d"),
    "flight_number": "SWA4146",
    "departure_airport": "SNA",
    "arrival_airport": "SMF",
    "fuel_consumption_gallons": 700.4,
    "flight_distance_miles": 450
}

期望计算每条唯一航线的总油耗,并找出油耗最高的航线,输出格式如下:

{
    "route": "SNA-SMF",
    "total_fuel_consumption_gallons": THE_CALCULATED_AMOUNT
},
{
    "route": "SFO-ORD",
    "total_fuel_consumption_gallons": THE_CALCULATED_AMOUNT
}

编写的Python脚本如下:

from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017/")
db = client["aviation_data"]
collection = db["flight_data"]

pipeline = [
    {
        "$group": {
            "_id": {
                "departure_airport": "$departure_airport",
                "arrival_airport": "$arrival_airport"
            },
            "total_fuel_consumption_gallons": {
                "$sum": "$fuel_consumption_gallons"
            }
        }
    },
    {
        "$project": {
            "_id": 0,
            "route": {
                "$concat": ["$_id.departure_airport", "-", "$_id.arrival_airport"]
            },
            "total_fuel_consumption_gallons": 1
        }
    },
    {
        "$sort": {
            "total_fuel_consumption_gallons": -1
        }
    },
    {
        "$limit": 5
    }
]

result = list(collection.aggregate(pipeline))
print(result)

运行脚本时出现错误:pymongo.errors.OperationFailure: The field 'departure_airport' must be an accumulator object

错误原因及修复方案

错误原因

该错误的核心是MongoDB版本兼容性问题:

  • 在MongoDB 3.2及更早版本中,$group阶段的_id字段不支持嵌套文档(即{"departure_airport": "$departure_airport", ...}这种结构),只能接受单一字段表达式或简单的字符串拼接,否则会将嵌套内的字段误判为需要累加器(accumulator)处理的字段,从而抛出该错误。

修复方案

有两种可行的修复方式:

方式1:提前拼接航线字符串作为分组ID

在$group阶段直接用$concat生成航线字符串作为_id,避免嵌套文档:

pipeline = [
    {
        "$group": {
            "_id": {
                "$concat": ["$departure_airport", "-", "$arrival_airport"]
            },
            "total_fuel_consumption_gallons": {
                "$sum": "$fuel_consumption_gallons"
            }
        }
    },
    {
        "$project": {
            "_id": 0,
            "route": "$_id",
            "total_fuel_consumption_gallons": 1
        }
    },
    {
        "$sort": {
            "total_fuel_consumption_gallons": -1
        }
    },
    {
        "$limit": 5
    }
]

方式2:升级MongoDB版本

如果业务允许,将MongoDB升级到3.4及以上版本,此时$group的_id支持嵌套文档结构,原脚本可直接正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:54:56