如何将对象外的变量用作MongoDB更新操作$inc中的动态对象key
问题原因
JS的对象字面量语法中,未特殊处理的键会被默认解析为字符串字面量,你写的{ query: 1 }里的query会被直接识别为字符串"query",不会读取你提前定义的变量值。
解决方案
使用ES6引入的计算属性名语法,把要作为动态键的变量用方括号[]包裹即可,仅需修改$inc部分的代码:
for (var i = 0; i < lootbox.length; i++) { const { type } = lootbox[i] const query = type + "_lootbox.hunt"; await lb.findOneAndUpdate( { userID: message.author.id }, { $inc: { [query]: 1 } } // 给query变量加[]包裹即可 ); }
兼容低版本环境方案
如果运行环境不支持ES6语法,也可以手动构造更新对象实现同样效果:
for (var i = 0; i < lootbox.length; i++) { const { type } = lootbox[i] const query = type + "_lootbox.hunt"; // 手动构造更新参数 const updateParam = { $inc: {} } updateParam.$inc[query] = 1 await lb.findOneAndUpdate( { userID: message.author.id }, updateParam ); }
内容的提问来源于stack exchange,提问作者Coding newbies
相关产品推荐
相关产品推荐

