Mongoose/Node.js动态更新数组内对象属性的问题
解决方案
你遇到的问题是因为在对象字面量中直接使用字符串字面量作为键时,变量不会被解析。要动态生成查询和更新的路径,需要使用ES6计算属性名(用方括号包裹表达式)来实现。
正确代码示例
let arrayToUpdate = 'array1' let idToUpdate = 2 let user = 'user123' // 动态构建查询条件 const query = { user: user, [`${arrayToUpdate}.id`]: idToUpdate }; // 动态构建更新文档 const updateDocument = { $set: { [`${arrayToUpdate}.$.active`]: false // 这里用布尔值false,不是字符串"false" } }; const result = await AutoUsersPositions.updateOne(query, updateDocument);
关键说明
- 计算属性名允许你在对象字面量中使用表达式作为键,用
[表达式]的形式,这里用模板字符串动态拼接数组路径。 - 注意把
"false"改成布尔值false,否则会把active字段设为字符串类型,不符合原本的字段类型。
内容的提问来源于stack exchange,提问作者Ni Tai
相关产品推荐
相关产品推荐

