如何在Mongoose聚合中按brand_id分组并筛选订单总额超1000$的品牌
解决方案
你需要在聚合管道中做两步调整:
- 在
$group阶段计算每个品牌的订单总额 - 添加
$match阶段筛选总额超过1000美元的品牌
假设你的订单金额字段名为amount(如果实际字段名不同,替换成对应名称即可),修改后的代码如下:
const data = await Sales.aggregate([ { $group: { _id: '$brand_id', records: { $push: "$$ROOT" }, totalAmount: { $sum: '$amount' } // 计算每个品牌的订单总额 } }, { $match: { totalAmount: { $gt: 1000 } } // 筛选总额超过1000美元的品牌 } ]);
关键说明:
$sum: '$amount':遍历每个分组内的文档,累加指定金额字段的值,得到该品牌的订单总额$match阶段必须放在$group之后:因为要先完成分组和总额计算,再对分组后的结果进行筛选。如果反过来,会变成筛选单个订单金额超1000的记录,不符合你要的品牌总额筛选逻辑
如果你的订单金额字段不是amount,比如是orderTotal,只需要把$sum里的'$amount'替换成实际字段名即可。
内容的提问来源于stack exchange,提问作者Akash
相关产品推荐
相关产品推荐

