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

Python+MongoEngine的PUT接口用$addToSet给子数组加JSON报错如何解决?

问题解决方案

错误原因

你触发ValueError: update cannot be empty的问题来源于两处语法错误:

  • MongoEngine的update()方法不支持直接传入原生MongoDB更新字典作为参数,传入的字典无法被识别为更新操作,因此框架判定更新内容为空
  • 字段名sublist前多余添加了$前缀,只有MongoDB操作符需要带$前缀,业务字段名不需要

修复方案

提供两种可用写法,任选其一即可:

写法1:使用MongoEngine封装的ORM语法(推荐)

直接用MongoEngine内置的双下划线操作符实现$addToSet逻辑:

put_list = Lists.objects(id=list_id).update(add_to_set__sublist=sublist)

写法2:使用原生MongoDB更新语法

如果需要写原生MongoDB操作语句,改用update_raw()方法接收更新字典:

put_list = Lists.objects(id=list_id).update_raw({"$addToSet": {"sublist": sublist}})

额外验证项

修复后如果仍有异常可检查:

  • 你的Lists文档模型中sublist字段定义为ListField类型,且元素类型与你传入的sublist参数结构匹配
  • 传入的list_id格式与模型中id字段的类型一致(如ObjectId类型需要先做格式转换)

内容的提问来源于stack exchange,提问作者planetstarbucks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:45:07