如何在Node.js的Mongoose中更新嵌套文档?编辑器报错求助
Mongoose更新嵌套文档报错的原因及解决方法
你的代码报错的核心原因是对象字面量中属性名的写法不符合JavaScript语法,同时也没遵循MongoDB更新嵌套数组的路径规则:
- 直接写
flashcards[Math.floor(i/2)].side1作为$set的属性名是无效JS语法——如果要用动态计算的属性名,必须用ES6的计算属性名语法,把整个计算后的路径用方括号包裹。 - MongoDB更新嵌套数组元素时,路径需要用点表示法(比如
flashcards.0.side1),而非方括号索引的写法。
修正后的代码:
// 先计算出正确的MongoDB更新路径 const targetPath = `flashcards.${Math.floor(i/2)}.side1`; // 使用计算属性名传入$set flashcardDeck.updateOne( { _id: deck._id }, { $set: { [targetPath]: newFlashcardsArr[i] } } );
说明:
- 当
i为0或1时,Math.floor(i/2)得到0,targetPath就是flashcards.0.side1,对应数组中第一个flashcard的side1字段; - 计算属性名
[targetPath]会把变量的值作为对象键名,符合JS语法要求; - 这种点表示法的路径是MongoDB/Mongoose识别嵌套数组元素的标准方式,能正确定位到要更新的字段。
内容的提问来源于stack exchange,提问作者Zsombor
相关产品推荐
相关产品推荐

