如何在PyMongo中更新嵌套字典而不修改其他关联字典
Flask+PyMongo 嵌套字典字段更新解决方案
你当前的代码通过$set直接替换了整个settings对象,导致原有字段被覆盖。要只更新settings.profile.links里的指定键值对,必须用MongoDB的点路径语法定位嵌套字段,而非替换上层完整对象。
修正后的代码:
if request.form.get("name") and request.form.get("link"): # 构造精准的嵌套字段路径 target_field = f"settings.profile.links.{request.form.get('name')}" db.update_one( {"name": request.cookies.get("x-session-name")}, {"$set": {target_field: request.form.get("link")}} )
说明
- 这种写法只会修改
settings.profile.links下的指定键值对,完全保留settings.dob、settings.profile.bio等其他字段。 - 如果目标键在
links中不存在,会自动新增;如果已存在,则覆盖原有值。 $push是数组操作符,不适用于字典类型的links,所以用$set配合点路径才是正确方案。
内容的提问来源于stack exchange,提问作者2vw
相关产品推荐
相关产品推荐

