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

MongoDB按create_date分组聚合如何实现多条件计数

MongoDB 按日期分组后多条件统计实现方案

你现有聚合框架不需要做大的调整,直接在$group阶段追加条件计数逻辑即可,一次聚合就能同时返回总记录数和各筛选条件下的记录数。

核心实现方式

利用$group阶段的$cond条件运算符做条件累加:符合判断规则的文档记1,不符合的记0,通过$sum累加后直接得到对应条件的记录总数,不需要额外拆分查询或增加$match阶段,执行效率更高。

完整聚合代码

db.你的目标集合名.aggregate([
  // 前置过滤阶段:保留你原有的筛选逻辑,提前缩小数据范围
  {
    $match: {
      country_code: 1,
      create_date: { $gt: "2022-06-01" }
    }
  },
  {
    $group: {
      _id: { datebasis: "$create_date" },
      // 保留原有总记录数统计逻辑
      TotalRecordscount: { $sum: 1 },
      // 新增:统计scr_7day等于0的记录数
      Scr7dayZeroCount: {
        $sum: {
          $cond: [ { $eq: [ "$scr_7day", 0 ] }, 1, 0 ]
        }
      },
      // 新增:统计resolution_duration_minutes小于1440的记录数
      ResolutionLt1440Count: {
        $sum: {
          $cond: [ { $lt: [ "$resolution_duration_minutes", 1440 ] }, 1, 0 ]
        }
      }
      // 其他统计规则按上述格式追加即可
    }
  },
  // 可选配置:按日期升序排列结果
  { $sort: { "_id.datebasis": 1 } }
])

扩展规则说明

  • 单条件判断直接使用比较运算符即可:等于用$eq、小于用$lt、大于用$gt、不等于用$ne
  • 多条件组合判断可以用$and/$or包裹多个规则,例如统计同时满足scr_7day=0且国家为US的记录数,判断条件写为:
    $cond: [
      { $and: [ { $eq: ["$scr_7day", 0] }, { $eq: ["$country_code", "US"] } ] },
      1,
      0
    ]
    
  • 所有条件计数和总记录数在同一次分组计算中完成,不会出现计数口径不一致的问题

返回结果示例

/* 1 */
{
    "_id" : {
        "datebasis" : "2022-06-09"
    },
    "TotalRecordscount" : 15478.0,
    "Scr7dayZeroCount" : 8921.0,
    "ResolutionLt1440Count" : 7245.0
}

/* 2 */
{
    "_id" : {
        "datebasis" : "2022-06-14"
    },
    "TotalRecordscount" : 16688.0,
    "Scr7dayZeroCount" : 9657.0,
    "ResolutionLt1440Count" : 8102.0
}

内容的提问来源于stack exchange,提问作者Gaurav Aggarwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:18:18