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

如何使用MongoDB统计时间区间累计注册用户以生成统计图表

累计注册用户区间统计实现方案咨询

我需要制作一张图表,展示指定时间区间内的累计注册用户总量。我目前使用的开发语言是TypeScript,也接受其他语言的实现方案,或是基于MongoDB aggregate聚合框架的实现方案。

示例输出:

第1天:累计注册用户10人
第2天:139人...
第3天:1230人...
第4天:2838人... 
...
... 
当日:X名注册用户

需要说明的是,所有用户文档都包含date类型的createAt字段。

我尝试过使用cube的方式获取用户数据,但该方案性能不够理想。

尝试过的代码如下:

const response = await this.userModel.aggregate([
      {
        $bucketAuto: {
          groupBy: '$createdAt',
          buckets: 4,
        },
      },
    ]);
console.log(response);

我也考虑过使用MongoDB的mapReduce功能传入自定义函数处理,但出于性能考虑,我更希望了解是否可以直接通过aggregate聚合管道简单实现该需求。mapReduce是性能稍差的第二选择,最差的方案是只拉取所有用户的CreateAt字段到后端自行处理。

提前感谢各位的解答。

更新

补充说明:使用$bucketAuto返回的结果是按非固定时间区间分组的,它本质上是按用户数量对创建日期进行分组;另外我向MongoDB传入日期参数使用$bucket时,返回结果也不符合预期。

输入示例:

const list = [
    {
        "createdAt": "2021-08-30T23:47:16.663Z",
        "_id": "612d6e044007a95446848cef"
    },
    {
        "createdAt": "2021-08-31T04:18:11.820Z",
        "_id": "612dad830541fa001bb63671"
    },
    {
        "createdAt": "2021-08-31T04:18:47.794Z",
        "_id": "612dada70541fa001bb63674"
    },
    {
        "createdAt": "2021-08-31T04:20:14.415Z",
        "_id": "612dadfe0541fa001bb63678"
    },
    {
        "createdAt": "2021-08-31T04:22:45.580Z",
        "_id": "612dae950541fa001bb63682"
    },
    {
        "createdAt": "2021-08-31T11:24:28.471Z",
        "_id": "612e116c0541fa001bb63688"
    },
    {
        "createdAt": "2021-08-31T18:47:09.452Z",
        "_id": "612e792dba2a3e1d081c9f3d"
    }
];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:48:03