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

MongoDB如何更新深层嵌套的非文档类型数组的指定元素

错误原因梳理

  • 匹配逻辑错误:你要操作的tasks是纯字符串数组,arrayFilters中错误写为inner.food匹配不存在的food字段,导致匹配不到目标元素
  • 字段引用错误:第三种写法的更新路径写为不存在的foods顶层字段,自然无法生效
  • 类型不匹配:示例文档中days子元素的_id是字符串类型,你代码中用ObjectId()包裹后类型不一致,无法命中目标元素
  • 路径错误:第一种写法的更新路径没有指向tasks数组,直接在days子元素层级修改值,语法非法直接报错

正确实现代码

如果你的数据和示例一致,days子元素的_id为字符串类型,使用以下代码即可:

await Schema.updateOne(
  { _id: ObjectId("random123") },
  { $set: { "days.$[outer].tasks.$[inner]": "enjoy" } },
  {
    arrayFilters: [
      { "outer._id": "1b" },
      { "inner": "office" }
    ]
  }
)

如果实际场景中days子元素的_id是ObjectId类型,只需要将arrayFilters中的"outer._id": "1b"修改为"outer._id": ObjectId("1b")即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:15:06