You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Mongoose中按name、provider分组后按月分组求月度平均值

实现方案

你可以通过Mongoose的聚合管道分步骤完成需求,为了避免不同年份的同月数据混淆,建议同时提取年份和月份作为分组维度:

完整聚合查询代码

const result = await 你的集合Model.aggregate([
  // 第一步:按provider、name、年月分组,计算单月totalSalesUsd平均值
  {
    $group: {
      _id: {
        provider: "$provider",
        name: "$name",
        year: { $year: "$createdAt" },
        month: { $month: "$createdAt" }
      },
      avgSalesUsd: { $avg: "$totalSalesUsd" }
    }
  },
  // 可选第二步:如果需要按name+provider为根分组,把所有月份的统计结果聚合到同一个条目下
  {
    $group: {
      _id: {
        provider: "$_id.provider",
        name: "$_id.name"
      },
      monthlyStatistics: {
        $push: {
          year: "$_id.year",
          month: "$_id.month",
          avgSalesUsd: "$avgSalesUsd"
        }
      }
    }
  },
  // 可选:调整输出字段格式,简化结构
  {
    $project: {
      _id: 0,
      provider: "$_id.provider",
      name: "$_id.name",
      monthlyStatistics: 1
    }
  }
])

结果说明

  • 如果不需要按name+provider聚合为同一对象,删掉第二个$group阶段即可,输出的每条结果直接对应一个name+provider+年月维度的平均销售额
  • 如果需要统计指定时间范围的数据,可以在聚合最开头加$match阶段过滤createdAt的时间范围
  • Mongoose的聚合语法和原生MongoDB完全兼容,直接调用对应集合模型的aggregate方法即可执行

内容的提问来源于stack exchange,提问作者aqeel raza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:18:00