如何在PyMongo中更新MongoDB嵌套列表字典的指定值
使用PyMongo修改MongoDB数组中指定元素的字段值
现有如下MongoDB文档:
{ "_id" : ObjectId("633c1dc6d3f3452751698332"), "col_1" : 153.618639317759, "col_2" : 276.7287225, "col_3" : "A2", "col_4" : "R18", "col_5" : [ { "f" : 0, "Z" : 2.87673627341312 }, { "f" : 1, "Z" : 2.87673627341312 }, { "f" : 2, "Z" : 2.87673627341312 }, { "f" : 3, "Z" : 2.87673627341312 }, { "f" : 4, "Z" : 2.87673627341312 } ] }
需要将col_5列表中f=4的元素的Z值修改为1000,最终文档中该元素会变为:
{ "f" : 4, "Z" : 1000 }
实现代码
使用PyMongo可以通过以下代码完成该操作:
from pymongo import MongoClient from bson.objectid import ObjectId # 连接MongoDB服务 client = MongoClient('mongodb://localhost:27017/') # 指定目标数据库和集合 db = client['你的数据库名称'] collection = db['你的集合名称'] # 定义查询条件:定位目标文档和数组元素 query = { "_id": ObjectId("633c1dc6d3f3452751698332"), "col_5.f": 4 } # 定义更新操作:修改匹配到的数组元素的Z字段 update = { "$set": { "col_5.$.Z": 1000 } } # 执行更新 result = collection.update_one(query, update) # 查看更新结果 print(f"匹配到的文档数量: {result.matched_count}") print(f"成功修改的文档数量: {result.modified_count}")
关键说明
query中的"col_5.f": 4用于筛选出包含目标数组元素的文档,同时让MongoDB的$定位符能精准定位到数组中f=4的元素。$set操作符配合col_5.$.Z只会更新匹配到的数组元素的Z字段,不会改动数组中的其他元素或文档的其他字段。- 如果不需要通过
_id定位文档,也可以替换为其他唯一标识字段的查询条件。
内容的提问来源于stack exchange,提问作者mahsa nemati
相关产品推荐
相关产品推荐

