如何使用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
相关产品推荐
相关产品推荐

