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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:36:05