如何使用Mongoose Aggregate按条件统计金额总和并排序
Mongoose Aggregate 实现方案
需求拆解
核心逻辑:筛选status为true的订单,按serverUID和objid分组后统计每组的amount总和,同时让结果按serverUID、objid排序。
聚合管道代码实现
ORDER.aggregate([ // 1. 筛选status为true的文档 { $match: { status: true } }, // 2. 按serverUID和objid分组,统计每组amount总和 { $group: { _id: { serverUID: "$serverUID", objid: "$objid" }, totalAmount: { $sum: "$amount" }, // 可选:如需保留组内关联的玩家名,可添加此字段 relatedPlayers: { $addToSet: "$playername" } } }, // 3. 按serverUID升序、objid升序排序(降序用-1) { $sort: { "_id.serverUID": 1, "_id.objid": 1 } }, // 可选:重命名字段让结果更直观 { $project: { _id: 0, serverUID: "$_id.serverUID", objid: "$_id.objid", totalAmount: 1, relatedPlayers: 1 // 上面添加了此字段才保留 } } ]) .then(result => { console.log(result); }) .catch(err => { console.error(err); });
代码说明
- $match阶段:精准过滤目标文档,减少后续处理的数据量。
- $group阶段:以
serverUID+objid作为联合分组键,用$sum计算每组金额总和;如果需要留存组内其他信息,可通过$addToSet收集不重复的字段值。 - $sort阶段:对分组结果按指定字段排序,控制输出顺序。
- $project阶段(可选):重构输出字段结构,去掉默认的
_id,让返回结果更易读。
内容的提问来源于stack exchange,提问作者Jeremy Wu
相关产品推荐
相关产品推荐

