如何在Mongoose的findOneAndUpdate方法中使用动态键优化重复代码?
你可以通过ES6计算属性名+前置合法性校验的方式大幅简化代码,完全不需要写重复的if分支:
// 预先定义合法的按钮ID列表,避免非法ID意外修改数据库其他字段 const validSongIds = ['song1', 'song2', 'song3', 'song4', 'song5'] // 先校验ID合法性 if (!validSongIds.includes(button.id)) { // 可根据业务需求加错误提示或异常抛出逻辑 throw new Error('无效的按钮ID') } // 使用ES6计算属性名动态生成更新字段 await model.findOneAndUpdate( { userId: user.id }, { [`${button.id}.name`]: songName, [`${button.id}.link`]: songLink } )
你之前以为对象键不能使用模板字符串是误区,ES6支持计算属性名语法:将表达式放在方括号中作为对象的键,就可以动态生成你需要的MongoDB嵌套字段更新路径,效果和你硬编码的写法完全一致。后续如果要新增song6、song7等按钮,只需要往validSongIds数组中新增对应ID即可,不需要额外加判断分支,维护成本极低。
内容的提问来源于stack exchange,提问作者nairol203
相关产品推荐
相关产品推荐

