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

如何用PyMongo插入含ISODate格式的JSON数据至MongoDB?

解决PyMongo导入含$date的JSON时无法识别为ISODate的问题

问题根源

mongoimport工具会自动识别MongoDB的扩展JSON格式,把$date标记的内容转成ISODate对象;但用Python标准库的json.load解析时,只会把{ "$date": "..." }当成普通字典,PyMongo插入时自然不会处理成日期类型,导致没法用$gt、$lt做范围查询。

最简单的解决方案:用bson.json_util解析JSON

PyMongo自带了bson.json_util模块,专门用来处理MongoDB的扩展JSON,能直接把$date转成Python的datetime对象,插入时自动对应MongoDB的ISODate。

修改后的代码

from pymongo.mongo_client import MongoClient
from bson.json_util import loads  # 替换标准的json.load

if __name__ == '__main__':
    with MongoClient() as mongo:
        db = mongo.get_database("mydb")
        with open("data.json", "r") as data_file:
            # 先读取文件内容,再用bson的loads解析
            data_content = data_file.read()
            docs = loads(data_content)
            db["mycollectionII"].insert_many(docs, ordered=False)

验证结果

插入后查询,born字段会显示为ISODate('2018-11-10T22:26:12.111Z'),完全支持日期范围查询。

备选方案:直接调用mongoimport命令

如果数据量特别大,或者不想改解析逻辑,也可以在Python里直接调用mongoimport命令,复用它的解析能力:

import subprocess

# 执行mongoimport导入数据
subprocess.run([
    "mongoimport",
    "-d", "mydb",
    "-c", "mycollectionII",
    "--jsonArray",
    "--type", "json",
    "data.json"
], check=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 09:10:13