MongoDB Realm更新嵌套文档时如何使用动态变量作为键名
问题原因
你之前的写法没有生效是因为双引号包裹的字符串中,JS不会解析${}模板占位符,只会将其作为普通字符串处理,最终提交给MongoDB的更新路径是错误的。
正确实现方式
利用ES6的计算属性名语法,用方括号包裹动态生成的路径字符串即可:
const door_number = 7; // 点击获取的日历门编号 const date = new Date(); // 当前日期 const result = await PrivateUserData.updateOne( { id: myID }, { $set: { [`codes.${door_number}.claimed_at`]: date } } );
JS会先计算方括号内模板字符串的结果,生成codes.7.claimed_at这类符合要求的动态路径,再作为$set的键名传入更新语句。
注意事项
- 注意数据库中实际存储的字段名是
claimed_at,你之前的测试代码里写的date_claimed要和实际字段名保持一致,否则会新增无关字段。 - 如果
door_number是数字类型也无需额外转换,MongoDB的对象键默认是字符串格式,会自动适配。
内容的提问来源于stack exchange,提问作者Nilom
相关产品推荐
相关产品推荐

