如何使用Mongoose aggregate实现按symbol分组的多维度指标统计
MongoDB按symbol分组统计聚合写法
你需要的$group阶段以及后续字段映射的完整聚合代码如下:
let result = await TransactionEvent.aggregate([ { $match : { timestamp : { $gte: new Date(Date.now() - INTERVALS[timeframe]) } } }, { $group : { _id: "$symbol", // 按symbol字段分组 occurences: { $sum: 1 }, // 统计每个分组的总条数 summedAmount: { $sum: "$amount" }, // 累加amount字段总和 summedValue: { $sum: "$value" }, // 累加value字段总和 in: { $sum: { $cond: [{ $eq: ["$direction", "IN"] }, 1, 0] } }, // 统计direction为IN的条数 out: { $sum: { $cond: [{ $eq: ["$direction", "OUT"] }, 1, 0] } } // 统计direction为OUT的条数 } }, // 把分组键_id重命名为symbol,匹配你需要的输出结构 { $project: { _id: 0, symbol: "$_id", occurences: 1, summedAmount: 1, summedValue: 1, in: 1, out: 1 } } ]);
注意事项
- 如果你的
timestamp字段实际存储的是字符串格式的时间戳,需要先转成数字或者ISODate类型再做$match比较,否则会出现匹配失效的问题。 $cond是MongoDB的条件运算符,第一个参数为判断条件,满足则返回第二个参数,不满足返回第三个参数,配合$sum即可实现按条件计数的效果。
内容的提问来源于stack exchange,提问作者headliner090
相关产品推荐
相关产品推荐

