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

MongoDB聚合按context分组统计时段数据计数返回0/1问题

错误原因

统计结果只返回0或1的核心问题是:你把lesser_12h、lesser_24h两个累加统计字段写进了$group的_id分组键里。
$group阶段会按_id内所有字段的值组合做拆分,你把计数逻辑放在分组键中,相当于每条记录只要满足/不满足时间条件就会单独成组,单组内最多只有1条记录,累加结果自然只能是0或1。

修复方案

把两个累加统计字段从_id对象中移出来,作为$group阶段和_id平级的统计属性即可;如果要完全匹配你给出的返回格式,最后追加一个$project阶段调整字段名、过滤多余字段即可。
修正后的完整聚合代码如下:

const aggregation = [
  { $match: { EVENTTIME: { $gte: startDate } } },
  { 
    $group: {
      _id: '$CONTEXT', // 分组键仅保留CONTEXT字段
      lesser_12h: {
        $sum: {
          $cond: [
            { 
              $lte: [{ $subtract: [ '$EVENTTIME', startDate ] }, 12 * 60 * 60 * 1000]
            },
            1,
            0
          ]
        }
      },
      lesser_24h: { 
        $sum: {
          $cond: [
            { 
              $lte: [{ $subtract: [ '$EVENTTIME', startDate ] }, 24 * 60 * 60 * 1000]
            },
            1,
            0
          ]
        }
      }
    }
  },
  {
    $project: {
      _id: 0,
      context: '$_id',
      lesser_12h: 1,
      lesser_24: '$lesser_24h' // 对齐期望返回的字段名
    }
  }
];
补充说明
  • 代码里用12 * 60 * 60 * 1000、24 * 60 * 60 * 1000代替硬编码的毫秒数值,后续维护时不需要手动换算时间,可读性更高
  • 最后的$project阶段仅用于对齐你给出的期望返回结构,如果不需要严格匹配字段名,可以直接删除该阶段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 05:01:02