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

如何使用PyMongo基于Python字典更新Mongo文档键值或插入新键值对

pymongo 批量更新/新增文档字段实现方案

你不需要手动逐个指定要更新的键,直接将待更新的字段字典传入$set操作符即可实现需求,具体实现如下:

实现代码

# 待同步的本地字典
dic = {"_id":1,
       "A":123,
       "B":234,
       "C":222}

# 拷贝字典后移除_id字段,_id作为查询条件不需要参与更新
update_fields = dic.copy()
update_fields.pop("_id")

# 执行更新操作
collection.update_one(
    filter={"_id": dic["_id"]},
    update={"$set": update_fields}
)

逻辑说明

$set操作符原生支持传入多键值对字典,行为完全匹配你的需求:

  • 字典里的键在MongoDB文档中已存在时,直接覆盖更新对应的值
  • 字典里的键在MongoDB文档中不存在时,自动新增该键值对
  • 原文档中存在、但字典里没有的键(比如示例中的D字段)会完整保留,不会被删除或修改

执行上述代码后,目标文档会变成你预期的结果:

{"_id":1,"A":123,"B":234,"D":999,"C":222}

补充说明

  1. 你之前尝试的写法存在两处错误:
    • pymongo 3.x以上版本推荐使用update_one(更新单条匹配文档)/update_many(更新所有匹配文档),旧版update方法已废弃
    • 方法调用需要用圆括号传入参数,$set是更新参数的操作符键,不能直接写{"set"}占位
  2. 如果需要在_id对应文档不存在时自动创建新文档,可以在调用方法时加上upsert=True参数:
collection.update_one(
    filter={"_id": dic["_id"]},
    update={"$set": update_fields},
    upsert=True
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:48:20