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

PyMongo报错:'InsertManyResult'对象无'inserted_count'属性求助

问题解决:PyMongo InsertManyResult 不存在 inserted_count 属性

问题原因

PyMongo 3.4.0中,insert_many返回的InsertManyResult类没有inserted_count属性——这个属性属于update_many这类更新操作返回的UpdateResult对象。插入操作的结果对象属性规则如下:

  • insert_many返回的结果对象仅包含inserted_ids属性,是一个存储所有插入文档ID的列表
  • insert_one返回的InsertOneResult对象仅包含inserted_id属性,对应单个插入文档的ID

你的代码错误地对插入结果调用了inserted_count,因此触发AttributeError。

修复方案

1. 修正插入数量的获取逻辑

替换原有的数量获取代码,根据插入类型计算数量:

print(x)
# 区分批量/单条插入的数量获取方式
if hasattr(x, 'inserted_ids'):
    inserted_count = len(x.inserted_ids)
else:
    inserted_count = 1 if hasattr(x, 'inserted_id') else 0
print(inserted_count, "documents inserted.")
number_of_insert_data = inserted_count

2. 补充错误判断逻辑

你的ins_data函数在出错时会返回字符串(如"error in ins_data function"),后续直接调用属性会再次报错,需要先校验返回值类型:

x = ins_data(one_or_many_bool, insert_values_json )

# 先判断是否插入成功
if isinstance(x, str):
    print("插入失败:", x)
    exit()

# 再处理插入数量
inserted_count = len(x.inserted_ids) if one_or_many_bool else 1
print(inserted_count, "documents inserted.")
number_of_insert_data = inserted_count

完整修复后的核心代码片段

x = ins_data(one_or_many_bool, insert_values_json )

print(x)
if isinstance(x, str):
    print("插入错误:", x)
else:
    inserted_count = len(x.inserted_ids) if one_or_many_bool else 1
    print(inserted_count, "documents inserted.")
    number_of_insert_data = inserted_count

    # 后续获取插入数据的逻辑保持不变
    modified_data_list = []
    for modified_data in mycol.find().sort("_id", -1).limit(number_of_insert_data):
        modified_data_list.append(modified_data)

额外提示

PyMongo的插入结果类与更新结果类设计逻辑不同,插入操作的文档数量只能通过inserted_ids的长度(批量场景)或直接设为1(单条场景)来获取,这是官方文档明确的规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:00:47