MongoDB操作指南:如何向内层嵌套数组中推送新增元素
问题原因
你写法的核心错误是MongoDB更新操作的字段路径不支持[索引]的语法格式,访问数组指定索引元素的正确路径格式为数组名.索引,而非你用到的数组名[索引]。
正确写法
直接修改路径格式即可生效:
await Post .updateOne({ _id: postID }, { $push: { "reactions.0.emoji1": 'random user' } })
如果你的Schema开启了严格模式,需要确认reactions.0.emoji1的路径结构和Schema定义完全匹配,否则会被Mongoose自动过滤掉更新字段。
备选方案(兼容性更高)
如果你的reactions数组元素顺序不固定,不能确定emoji1一定在第一个位置,可以用arrayFilters匹配对应emoji字段的元素再更新:
await Post.updateOne( { _id: postID }, { $push: { "reactions.$[item].emoji1": "random user" } }, { arrayFilters: [{ "item.emoji1": { $exists: true } }] } )
这个写法会自动匹配reactions数组中所有包含emoji1字段的元素,向对应的数组中推送内容,不受元素顺序影响。
内容的提问来源于stack exchange,提问作者bls
相关产品推荐
相关产品推荐

