使用Pymongo更新MongoDB集合文档列表内子文档的布尔字段
实现方案
你可以通过pymongo提供的数组过滤器(arrayFilters)能力完成精准的数组子文档更新,以下是适配你需求的可执行代码:
from pymongo import MongoClient # 建立MongoDB连接(根据你的实际配置修改连接参数) client = MongoClient('mongodb://localhost:27017/') db = client['你的数据库名'] collection = db['你的集合名'] # 匹配顶层文档的条件 filter_condition = {'_id': "fijo_2"} # 定义更新操作:将匹配到的数组子文档的leido字段设为True update_operation = {'$set': {"Procesos.$[target].leido": True}} # 数组过滤条件:匹配Procesos数组中符合三个code要求的子文档 array_filters = [ { 'target.code_a': "3333", 'target.code_b': "4444", 'target.code_c': "5555" } ] # 执行更新 result = collection.update_one( filter=filter_condition, update=update_operation, array_filters=array_filters, upsert=False # 确定文档存在的情况下建议设为False,避免误插入 ) # 可打印更新结果确认 print(f"匹配到的文档数:{result.matched_count},更新的文档数:{result.modified_count}")
注意事项
- 字段命名要和数据库里的结构完全一致:你提供的示例代码里用了驼峰命名
codeA/codeB,但你的数据库实际是下划线命名code_a/code_b,写错会导致匹配不到子文档,更新无效果 - 如果你需要额外避免重复更新已经标记为
leido=True的文档,可以在数组过滤条件里加'target.leido': False - 如果你需要批量更新多个符合条件的顶层文档,把
update_one替换为update_many即可
内容的提问来源于stack exchange,提问作者Angel Rivas Hidalgo
相关产品推荐
相关产品推荐

