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

如何使用Model.findAndUpdate在MongoDB现有JSON对象中执行加法更新?

MongoDB 实现特定月份分类成本累加更新的 findAndUpdate 写法

需求说明

需要对MongoDB文档中指定年份(示例为2022)下的特定月份,将对应分类(Food、Traveling、Medical)的成本值与传入的增量数组执行累加操作,最终更新文档数据。

实现思路

使用MongoDB的$inc操作符实现数值累加,通过动态字段路径关联传入的目标月份和分类,结合findAndUpdate方法完成原子性更新。

具体代码实现

假设你通过接口收到的Patch请求数据为:

const patchData = {
  "month":"March",
  "monthData":[70,45,100]
};

1. 构建更新对象

利用JavaScript模板字符串动态生成需要累加的字段路径:

const { month, monthData } = patchData;
const updateObj = {
  $inc: {
    [`2022.${month}.Food`]: monthData[0],       // 累加Food分类成本
    [`2022.${month}.Traveling`]: monthData[1], // 累加Traveling分类成本
    [`2022.${month}.Medical`]: monthData[2]    // 累加Medical分类成本
  }
};

2. 调用findAndUpdate

替换filter为你的文档定位条件(比如_id或其他唯一标识),执行更新:

Model.findAndUpdate(
  { _id: "目标文档ID" }, // 过滤条件,定位要更新的文档
  updateObj,
  { new: true } // 可选:设置为true时返回更新后的文档,默认返回更新前的文档
)
.then(updatedDocument => {
  console.log("更新后的文档:", updatedDocument);
})
.catch(error => {
  console.error("更新失败:", error);
});

关键说明

  • $inc是MongoDB专门用于数值增减的操作符,能保证原子性更新,避免并发更新冲突
  • 如果年份是动态可变的,同样可以用模板字符串替换,比如${targetYear}.${month}.Food
  • 若目标月份或分类字段不存在,$inc会自动创建该字段并设置为对应增量值(示例中已有对应字段,无需额外处理)

内容的提问来源于stack exchange,提问作者chaitanya tyagi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:11:07