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
相关产品推荐
相关产品推荐

