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

