如何使用ArrayFilter搭配$push插入子文档,相关报错如何处理
错误原因
你收到的报错核心逻辑为:
fail to run update: write exception: write errors: [The field 'subArr.0' must be an array but is of type object in document {_id: "1"}]
$push是MongoDB专门用于数组类型字段追加元素的操作符,你当前的写法是尝试向subArr.$[a0]执行$push,但$[a0]匹配到的是subArr数组中title="s1"的对象元素,该字段本身是对象类型,自然不支持$push操作。
解决方案
首先确认你的业务数据结构:你要插入子文档的目标是subArr下符合条件的对象内部的某个子数组字段,比如假设每个subArr元素内置了名为children的子数组用于存储子文档,仅需调整更新语句的目标字段即可,修改后的代码如下:
db.collection.update({}, { $push: { // 此处.children可替换为你实际业务中要写入的子数组字段名 "subArr.$[a0].children": { "input1": "c", "title": "s3" } } }, { arrayFilters: [ { "a0.title": { "$eq": "s1" } } ] })
如果你的业务需求是直接向根级的subArr数组追加新元素,不需要使用arrayFilters,直接将$push的目标字段指定为subArr即可。
内容的提问来源于stack exchange,提问作者Charlie
相关产品推荐
相关产品推荐

