首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >猫鼬:如何从DB获得过去7天的数据统计?

猫鼬:如何从DB获得过去7天的数据统计?
EN

Stack Overflow用户
提问于 2021-09-02 17:32:51
回答 2查看 645关注 0票数 0

在用户文档中,我已经注册了用户。我想通过API显示过去7天的统计数据。第一说-7用户,第二天-5用户,第三天-3用户.UserSchema包含-名称,电子邮件,createdAt等。我怎么能在Mongodb/猫鼬中做到这一点?

样本数据:

代码语言:javascript
复制
    {
        "_id": "612fa439ddb04331d6ea1e5d",
        "name": "imran-1630512185253",
        "createdAt": "2021-09-01T16:03:05.266Z",
    },
     {
        "_id": "612fa439ddb04331d6ea1e5d",
        "name": "imran-1630512185253",
        "createdAt": "2021-08-31T16:03:05.266Z",
    },
    ...........

预期产出:

代码语言:javascript
复制
    "filterData" : {
        1st day: 3,
        2nd day: 5,
        3rd day: 3,
        4th day: 8,
        ...
     }

使用这个API,我想要创建一个图表来显示统计数据。这个API应该提供哪一天,创建了多少用户。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-02 18:47:37

您所描述的查询是按日分组一系列文档,而这些文档包含UTC日期时间。

MongoDB内部将日期/时间存储为1970年1月1日以来的毫秒数,因此第一步需要计算每个文档的开始日期,然后根据该开始日期值进行分组。

如果使用的是MongoDB 5.0,则可以使用$dateTrunc操作符:

代码语言:javascript
复制
{$dateTrunc:{date:"$createdAt",unit:"day",timezone:"America/New_York"}}

对于旧版本,可以计算表示一天开始的日期对象,也可以生成仅包含日期的字符串。

对于string选项:

代码语言:javascript
复制
{$concat: [
   {$toString:{$year:{ date:"$createdAt", timezone:"America/New_York" }}},
   "-",
   {$toString:{$month:{ date:"$createdAt", timezone:"America/New_York" }}},
   "-",
   {$toString:{$dayOfMonth:{ date:"$createdAt", timezone:"America/New_York" }}},
]}

因此,总的来说,聚合管道将是:

  • 选择所需时间范围内的文档的$match
  • $project计算每个文档的一天开始时间
  • $group按一天开始计算,计数发生的次数
  • 将文档转换为所需格式的进一步阶段
票数 1
EN

Stack Overflow用户

发布于 2021-09-02 17:50:44

你可以做这样的事

代码语言:javascript
复制
var d = new Date();
d.setDate(d.getDate()-7);

然后

代码语言:javascript
复制
users.find({"createdAt": { $gt: d }})
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69034831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档