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

MongoDB聚合管道计算min/max价格返回None问题排查

问题原因

聚合管道的$project阶段存在字段遗漏:MongoDB聚合中使用$project时,除自动保留的_id字段外,所有未在阶段配置中显式声明的字段都会被过滤,不会流入后续管道阶段。
你的$project配置只生成了datetime字段,没有声明保留price字段,导致后续$group阶段执行$min、$max计算时,待处理的文档中根本不存在price字段,对不存在的字段做极值计算就会返回None。

修复方案

推荐直接把日期转换逻辑合并到$group阶段,省去单独的$project步骤,既不会漏字段,还能减少一次管道遍历提升性能,修正后的完整代码如下:

def min_max_volume(item_name):
    db = client.test
    mycol = db["ended"]
    pipeline = [
        {"$match": {"item_name": item_name}},
        {"$group": {
            '_id': { '$dateToString': { 'format': "%Y-%m-%d", 'date': { "$toDate": "$timestamp"}}},
            'min_price': {'$min': '$price'},
            'max_price': {'$max': '$price'},
        }}
    ]
    results = mycol.aggregate(pipeline)
    for i in results:
        print(i)

如果你想保留原有$project阶段的写法,只需要在$project配置里显式加上price字段的保留声明即可:

{"$project": {
    'datetime': { '$dateToString': { 'format': "%Y-%m-%d", 'date': { "$toDate": "$timestamp"}}},
    'price': 1  # 显式声明保留price字段,传递到后续阶段
}},

运行修正后的代码就能得到正常的极值计算结果,不会再出现min_price、max_price为None的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:36:51