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

JavaScript中按ID分组求和不同对象数值的技术问题

使用Mongoose Aggregate实现按_id分组求和value

直接用Mongoose的aggregate()方法就能搞定,核心是通过$group阶段按_id分组,再用$sum累加对应value值,具体实现如下:

代码示例

假设你的数据模型为YourModel,执行以下聚合操作:

YourModel.aggregate([
  {
    $group: {
      _id: "$_id", // 按_id字段分组
      totalValue: { $sum: "$value" } // 累加每组的value值
    }
  },
  {
    $project: {
      id: "$_id", // 将分组后的_id重命名为id,匹配期望输出格式
      value: "$totalValue",
      _id: 0 // 隐藏默认的_id字段
    }
  }
])
.then(result => {
  console.log(result);
})
.catch(err => {
  console.error(err);
});

执行结果

针对你提供的示例数组,执行后会得到符合预期的结果:

[
  { id: "123456", value: 55 },
  { id: "123456789123456789", value: 12 }
]

关键阶段说明

  • $group:按_id对文档进行分组,$sum操作符会自动累加同组内的value值。
  • $project:用于调整输出结构,把分组后的_id重命名为id,将累加结果映射为value,同时隐藏原始的_id字段。

如果是直接处理内存中的数组(而非从MongoDB查询数据),也可以用JavaScript原生的reduce方法实现:

const array = [
  { _id: "123456", value: 30 },
  { _id: "123456789123456789", value: 12 },
  { _id: "123456", value: 25 },
];

const result = Object.values(array.reduce((acc, item) => {
  if (!acc[item._id]) {
    acc[item._id] = { id: item._id, value: 0 };
  }
  acc[item._id].value += item.value;
  return acc;
}, {}));

console.log(result);

内容的提问来源于stack exchange,提问作者Weslley Fortunato

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 01:27:08