You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 04:54:25