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

MongoDB中含NaN字段计算$sum/$avg及PyMongo过滤NaN的方法

问题原因

你遇到的报错是因为Python全局作用域没有内置NaN变量,并非Python/PyMongo不支持匹配MongoDB中的NaN值。

解决方法

方案1:导入Python内置NaN(兼容性最好,支持所有MongoDB版本)

你只需要从Python标准库math模块导入nan即可,PyMongo会自动将其序列化为BSON格式的NaN,和JavaScript中直接写NaN的效果完全一致。
修正后的PyMongo代码如下:

import math
from pymongo import MongoClient

# 数据库连接逻辑此处省略
db = MongoClient().你的数据库名称
result = db['plan.data_pool'].aggregate([
    {'$match': {'geoid': '00', 'v': {'$ne': math.nan}}},
    {'$group': {'_id': '$accountable_id', 'agg': {'$sum': '$v'}}}
])

如果你项目中已经使用NumPy,也可以用numpy.nan代替math.nan,效果完全相同。

方案2:使用MongoDB内置$isNaN操作符(MongoDB 4.4及以上版本支持)

不需要导入任何Python变量,直接用MongoDB聚合表达式判断字段是否为NaN,写法如下:

result = db['plan.data_pool'].aggregate([
    {'$match': {'geoid': '00', '$expr': {'$not': {'$isNaN': '$v'}}}},
    {'$group': {'_id': '$accountable_id', 'agg': {'$sum': '$v'}}}
])

两种方案都可以实现和你JavaScript版本完全一致的筛选效果,过滤掉v字段为NaN的文档后再做聚合计算。


内容的提问来源于stack exchange,提问作者Ahad Rafat Talebi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:06:04