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

MongoDB聚合实现按日期统计客户状态计数

按日期统计MongoDB文档状态的键值对计数

针对你需要按日期统计客户状态数量,并直接输出键值对格式结果的需求,可以通过以下聚合管道实现,所有计算在数据库端完成,避免客户端处理的性能损耗:

完整聚合语句

db.collection.aggregate([
  // 1. 按日期+状态联合分组,统计每个组合的出现次数
  {
    $group: {
      _id: {
        day: { $dateToString: { format: "%Y-%m-%d", date: "$date" } },
        status: "$status"
      },
      count: { $sum: 1 }
    }
  },
  // 2. 按日期重新分组,将状态与计数整理为键值对数组
  {
    $group: {
      _id: "$_id.day",
      type: {
        $push: {
          k: "$_id.status",
          v: "$count"
        }
      }
    }
  },
  // 3. 将键值对数组转换为目标对象格式
  {
    $addFields: {
      type: { $arrayToObject: "$type" }
    }
  }
])

各阶段说明

  • 第一阶段$group:以格式化后的日期和状态作为联合分组键,统计每个组合的文档数量,输出结构类似:
    { "_id": { "day": "2022-12-01", "status": "activate" }, "count": 2 }
    
  • 第二阶段$group:按日期重新聚合,将每个状态的名称(k)和计数(v)存入type数组,输出结构类似:
    { "_id": "2022-12-01", "type": [ { "k": "activate", "v": 2 } ] }
    
  • 第三阶段$addFields:使用$arrayToObject将数组转换为键值对对象,得到最终需要的格式。

输出结果

针对你的示例数据,执行后会得到:

[
  { "_id": "2022-12-01", "type": { "activate": 2 } },
  { "_id": "2022-12-02", "type": { "deactivate": 1 } },
  { "_id": "2022-12-21", "type": { "deactivate": 1 } }
]

内容的提问来源于stack exchange,提问作者Lahiru Supun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:30:43