You need to enable JavaScript to run this app. 如何使用Mongoose aggregate实现按symbol分组的多维度指标统计
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 21:45:14