在Next.js中用Mongoose按User分组并汇总Amount的实现疑问
按User分组计算Amount总和的Mongoose实现方案
要实现按user字段分组并计算每个用户amount总和的需求,你需要替换原来的find()方法,改用Mongoose的aggregate()聚合查询,具体代码如下:
import Fill from '../../../models/bonusFill' const fills = await Fill.aggregate([ // 按user字段分组,计算每个组的amount总和 { $group: { _id: '$user', totalAmount: { $sum: '$amount' } } }, // 调整输出格式,匹配期望的结构 { $project: { _id: 0, // 隐藏默认生成的_id字段 user: '$_id', // 将分组的user值重命名为user字段 amount: '$totalAmount' // 将求和结果重命名为amount字段 } } ])
代码说明
- $group阶段:指定按
user字段进行分组,使用$sum累加每个分组内的amount值,得到该用户的总金额,存储在totalAmount字段中。 - $project阶段:调整输出的字段结构,把分组用的
_id(即原始的user值)重命名为user,把求和结果totalAmount重命名为amount,同时隐藏默认的_id字段,最终输出与你期望的结构完全一致。
执行这段代码后,返回的fills数据结构就会是你想要的:
{ "fills": [ { "user": "631ce46b9bed2e97ba77a0a3", "amount": 220 }, { "user": "632ce66b9bqd2e97baa795a4", "amount": 50 } ] }
内容的提问来源于stack exchange,提问作者Shahriyor Sharifjonov
相关产品推荐
相关产品推荐

