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

PyMongo问题:如何用Python的int值查询MongoDB的Long类型数据

解决PyMongo超大整数与MongoDB Long类型匹配及查询条件错误的问题

问题根源

  1. 类型不匹配:Python中超过32位的整数存入MongoDB时,会被自动转为BSON的int64类型(对应MongoShell中的Long)。但查询时直接传入Python int,PyMongo不会自动转换类型,导致MongoDB无法匹配存储的Long类型值。
  2. 查询条件写法错误:原代码中{"level_1": {"field_1": big_int_value}}是完全匹配整个level_1子文档,即要求level_1只能包含field_1一个字段。而首次插入后level_1包含field_1和field_2,因此即使类型匹配,这个条件也无法找到已存在的文档。

原生优雅解决方案

使用PyMongo内置的bson.int64.Int64类型包装查询值,同时修改查询条件为匹配子文档中的单个字段(用点路径语法):

  • 导入Int64类型
  • 用点路径level_1.field_1定位目标字段,避免完全匹配子文档的局限性
  • 用Int64包装超大整数作为查询值,确保与MongoDB存储的类型一致

修改后的代码

from bson.int64 import Int64

def update_value(big_int_value: int, bool_value: bool):
    db["my_db"].update_one(
        {"level_1.field_1": Int64(big_int_value)},
        {"$set": {"level_1.field_2": bool_value}}, 
        upsert=True
    )

补充说明

插入时PyMongo会自动将超大int转为Int64存入MongoDB,无需手动包装;但查询时必须显式用Int64包装,才能保证类型匹配,成功找到目标文档。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:29:50