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

pymongo批量操作相关:如何获取插入数、忽略重复数及MongoDB更新行数

pymongo批量插入统计及更新行数获取方法

insert_many操作的统计

首先明确:insert_many执行完成后返回的不是游标对象,是InsertManyResult类型的结果实例,不需要从游标获取属性,直接通过该结果实例的相关参数即可统计数据:

  • 如果你需要插入时自动忽略重复数据,需要先给对应字段创建唯一索引,同时调用insert_many时指定ordered=False参数,否则遇到重复唯一键的文档会直接抛出异常终止操作,无法继续插入剩余文档。
  • 成功插入的文档数量:直接读取len(result.inserted_ids)即可,inserted_ids列表存储了所有成功插入文档的_id值。
  • 被忽略的重复数据数量:常规场景下直接用待插入的总数据量减去成功插入的数量即可得到。如果需要更精准的统计(排除其他插入错误的干扰),可以捕获BulkWriteError异常,从异常详情中统计错误码为11000(重复键错误)的条目数量,就是准确的重复忽略数。

参考代码示例:

from pymongo.errors import BulkWriteError

data = [{"id": 1, "name": "a"}, {"id": 2, "name": "b"}, {"id": 1, "name": "a"}]
try:
    insert_result = db_connection.collection.insert_many(data, ordered=False)
    success_count = len(insert_result.inserted_ids)
    duplicate_count = len(data) - success_count
except BulkWriteError as e:
    # 精准统计重复错误的数量
    duplicate_count = sum(1 for err in e.details["writeErrors"] if err["code"] == 11000)
    success_count = e.details["nInserted"]

print(f"成功插入数量:{success_count}")
print(f"被忽略的重复数量:{duplicate_count}")

更新操作的行数获取

pymongo的更新类操作(update_one、update_many、replace_one)执行后返回的是UpdateResult类型的实例,直接读取对应属性即可得到行数:

  • matched_count:匹配到查询条件的文档总数量,不管文档内容是否实际发生了修改。
  • modified_count:本次操作实际修改的文档数量,如果更新的内容和文档原有内容完全一致,该值为0。

参考代码示例:

# 多条更新示例
update_result = db_connection.collection.update_many(
    {"age": {"$lt": 18}},
    {"$set": {"tag": "未成年"}}
)

print(f"匹配到的文档数:{update_result.matched_count}")
print(f"实际修改的文档数:{update_result.modified_count}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:45:03