如何在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
相关产品推荐
相关产品推荐

