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

如何在MongoDB或JavaScript中按UserTo分组对Amount求和并去重

方案1:JavaScript 原生实现

直接用Array.prototype.reduce即可完成分组累加,代码如下:

// 你的原始数据数组
const originArr = [/* 你给出的4条对象数据 */];

const result = Object.values(originArr.reduce((acc, curr) => {
  // 以UserTo为key做分组
  const key = curr.UserTo;
  if (!acc[key]) {
    // 首次出现该UserTo时初始化条目,可按需保留其他需要的字段
    acc[key] = {
      UserTo: key,
      totalAmount: 0,
      Status: curr.Status,
      CoinpackPurchasedID: curr.CoinpackPurchasedID
    }
  }
  // 累加金额
  acc[key].totalAmount += curr.Amount;
  return acc;
}, {}));

console.log(result);

用你的示例数据运行后,得到的结果为:

[
  {
    UserTo: "617f8d255c47518b674188c9",
    totalAmount: 15,
    Status: "Active",
    CoinpackPurchasedID: "617f96255c47518b6741893c"
  },
  {
    UserTo: "617f8c9d5c47518b674188ba",
    totalAmount: 10,
    Status: "Active",
    CoinpackPurchasedID: "617f96255c47518b6741893c"
  }
]

方案2:MongoDB 聚合查询实现

如果数据存在MongoDB集合中,直接用$group聚合阶段就能直接得到结果,不需要额外在业务层处理,假设你的集合名为transactions,查询语句如下:

db.transactions.aggregate([
  {
    $group: {
      _id: "$UserTo", // 按UserTo字段分组
      totalAmount: { $sum: "$Amount" }, // 累加同组的Amount字段
      // 按需保留其他字段,这里用$first取分组内第一条数据的对应值即可
      Status: { $first: "$Status" },
      CoinpackPurchasedID: { $first: "$CoinpackPurchasedID" }
    }
  },
  // 可选:把_id重命名为UserTo,更符合使用习惯
  {
    $project: {
      _id: 0,
      UserTo: "$_id",
      totalAmount: 1,
      Status: 1,
      CoinpackPurchasedID: 1
    }
  }
])

查询返回的结果和上面JS实现的结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:24:00