Discord.js开发:MongoDB更新动态字段名变量使用方案咨询
Discord管理员发物品指令动态字段实现方案
核心解决方法
JavaScript ES6 原生支持对象计算属性名语法,只需将$inc操作中写死的字段名用方括号包裹变量,即可实现动态指定MongoDB更新字段,无需为200余种物品重复编写逻辑。
- 语法格式:将原代码中
$inc下的bank: amount替换为[material]: amount - 建议额外增加物品合法性校验,避免输入错误生成无效数据字段
修改后可直接复用的代码
try { const targetData = await profileModel.findOne({ userID: target.id }); if (!targetData) { return message.channel.send(config.basemessages.messagesaccountmissing); } // 替换为你项目中实际存储的全量合法物品名列表 const validMaterialList = ["iron", "gold", "wood", "bank" /* 其余200余种物品依次补充即可 */]; if (!validMaterialList.includes(material)) { return message.channel.send(`输入的物品类型\`${material}\`不存在,请检查指令参数`); } await profileModel.findOneAndUpdate( { userID: target.id, }, { $inc: { [material]: amount, // 计算属性语法自动读取material值作为更新字段 }, } ); message.channel.send(`The targeted member has been given \`${amount}\` amount of \`${material}\`.`) } catch (err) { console.log(err); message.channel.send(`Error executing command. EC: \`${config.errorcodes.err2}\`.`) // Error Systeem }
语法说明
方括号包裹的对象键是ES6标准语法,方括号内支持传入变量、任意合法表达式,运行时会自动计算最终值作为对象键名,完全适配Mongoose及MongoDB原生驱动的所有更新操作,无兼容性问题。
内容的提问来源于stack exchange,提问作者Puffin Kwadraat
相关产品推荐
相关产品推荐

