如何使用pymongo更新MongoDB嵌套字典中的指定列表字段
错误原因
你的写法存在3个核心问题:
- 参数位置错误:
$set更新操作被错误放到了update_one的第一个参数(查询筛选条件)中,update_one的标准语法是update_one(筛选条件, 更新操作, 可选配置),参数位置错误会直接导致更新逻辑不生效。 - 动态字段拼接错误:Python无法解析字符串内部的变量调用
str(stage_element),需要在Python层先拼接出完整的嵌套字段路径,比如stage.Download。 - 误用位置操作符
$:$是用来匹配数组内元素的操作符,你的stage是嵌套对象而非数组,完全不需要使用该操作符。
正确实现代码
# 动态拼接嵌套字段路径 update_field = f"stage.{stage_element}" # 执行更新操作 update_result = collection.update_one( # 筛选条件:默认就是逻辑与,不需要额外加$and { "session_id": str(session_id), "user_id": str(user_id), "set_id": str(set_id) }, # 更新操作 { "$set": { update_field: stage_change } } ) # 可选:验证是否命中目标文档 if update_result.matched_count == 1: print("更新成功") else: print("未找到符合条件的文档")
如果需要同时更新多个stage下的字段,只需要在$set中补充对应的键值对即可。
内容的提问来源于stack exchange,提问作者Danish Xavier
相关产品推荐
相关产品推荐

