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

MongoDB聚合查询需求:按日期统计发送/失败状态的邮件数量

问题排查与修正方案

你的聚合查询存在两个关键问题,导致无法得到预期的按日期统计Send/Failed状态邮件数量的结果:

  • 未添加计数逻辑:仅通过$group按日期和状态分组,但没有统计每个分组内的文档数量,最终只会返回分组的_id,看不到具体邮件数。
  • 未过滤目标状态:没有筛选出仅状态为Send或Failed的邮件,会将所有状态的邮件都纳入分组统计。

修正后的聚合查询

db.emails.aggregate([
  // 第一步:只保留状态为Send或Failed的邮件
  {
    "$match": {
      "sEmailStatus": { "$in": ["Send", "Failed"] }
    }
  },
  // 第二步:按日期+状态分组,统计每组邮件数量
  {
    "$group": {
      "_id": {
        "date": { "$dateToString": { "format": "%Y-%m-%d", "date": "$createdAt" } },
        "status": "$sEmailStatus"
      },
      "count": { "$sum": 1 } // 统计每个分组的文档数量
    }
  },
  // 可选:按日期排序,让结果更直观
  {
    "$sort": { "_id.date": 1 }
  }
])

各阶段说明

  1. $match阶段:通过$in操作符筛选出状态为Send或Failed的邮件,减少后续分组的数据量,提升查询效率。
  2. $group阶段:
    • _id同时包含格式化后的日期(%Y-%m-%d)和邮件状态,确保每个日期下的不同状态各自分组。
    • count字段用$sum:1统计每个分组内的文档数量,每匹配到一个文档就累加1。
  3. $sort阶段:按日期升序排列结果,方便查看时间维度的趋势(可选,根据需求调整排序方向)。

内容的提问来源于stack exchange,提问作者Rajat Agarwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:01:31