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

如何将对象外的变量用作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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:18:03