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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:05:39