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

如何在MongoDB中通过另一字段值增加指定字段值(Mongoose)

问题解决:Mongoose中用字段值更新另一字段的类型错误

问题说明

尝试用Mongoose通过Workers.Efficiency.Mine字段的值来增加Resources.Gold字段的值时,出现类型转换错误。系统能识别Resources.Gold为数字类型,但将Workers.Efficiency.Mine识别为字符串类型,导致更新失败。

给定Schema(注意:原Schema中Nuber为拼写错误,应为Number)

Resources: {
  Gold: Number
}
Workers: {
  Efficiency: {
    Mine: Number
  }
}

原错误代码

schema.updateMany({}, {
  $inc: {
    "Resources.Gold": "Workers.Efficiency.Mine"
  }
}, function(err, response) {
  if(err) console.log(err);
  else console.log(response); 
});

解决方案

MongoDB 4.2及以上版本支持在更新操作中使用聚合管道,以此引用文档自身的字段值。修改后的代码如下:

schema.updateMany({}, [
  {
    $set: {
      "Resources.Gold": {
        $add: ["$Resources.Gold", "$Workers.Efficiency.Mine"]
      }
    }
  }
], function(err, response) {
  if(err) console.log(err);
  else console.log(response); 
});

关键说明

  • 原代码中$inc的参数直接传入字符串字段路径是错误的,$inc仅接受数值类型,无法直接引用其他字段。
  • 使用聚合管道数组作为更新操作的第二个参数,通过$add操作符将Resources.Gold和Workers.Efficiency.Mine的值相加,再用$set更新Resources.Gold字段。
  • 确保你的MongoDB版本在4.2及以上,否则不支持该特性。

内容的提问来源于stack exchange,提问作者Amit Hadad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:15:38