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

MongoDB中按日期与Task_type多级分组统计时长

MongoDB按日期+任务类型分组统计时长(实现指定输出格式)

聚合管道代码

db.collection.aggregate([
  // 拆解Work数组,将每个工作项转为独立文档
  { $unwind: "$Work" },
  // 按「日期+任务类型」分组,计算该组合的总时长
  {
    $group: {
      _id: {
        date: "$Work.date",
        taskType: "$Work.Tasks.Task_type"
      },
      totalDuration: { $sum: "$Work.Tasks.duration" }
    }
  },
  // 按日期分组,将不同任务类型的时长映射为固定字段
  {
    $group: {
      _id: "$_id.date",
      WorkDuration: {
        $sum: { $cond: [{ $eq: ["$_id.taskType", "Work"] }, "$totalDuration", 0] }
      },
      MeetingDuration: {
        $sum: { $cond: [{ $eq: ["$_id.taskType", "Meeting"] }, "$totalDuration", 0] }
      },
      BreakDuration: {
        $sum: { $cond: [{ $eq: ["$_id.taskType", "Break"] }, "$totalDuration", 0] }
      }
    }
  },
  // 按日期升序排序(可选)
  { $sort: { _id: 1 } }
])

各阶段说明

  • $unwind:将嵌套的Work数组拆分为独立文档,确保每个工作记录能被单独处理,是后续分组的基础。
  • 第一次$group:以「日期+任务类型」为组合键,先累加同日期同类型的时长,得到每个类型在对应日期的总时长。
  • 第二次$group:以日期为唯一分组键,通过$cond条件判断,将不同任务类型的总时长映射到指定字段;没有对应类型的日期,该字段自动累加0,完全匹配期望输出格式。
  • $sort:可选步骤,按日期升序排列结果,让输出更规整。

输出结果

{ "_id" : "2022-10-06", "WorkDuration" : 0, "MeetingDuration" : 0, "BreakDuration" : 60 }
{ "_id" : "2022-10-07", "WorkDuration" : 20, "MeetingDuration" : 60, "BreakDuration" : 0 }
{ "_id" : "2022-10-08", "WorkDuration" : 0, "MeetingDuration" : 50, "BreakDuration" : 0 }

内容的提问来源于stack exchange,提问作者ABRAAR KHN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:20:34