mongodb Mongoose :如何从数据库中获取过去7天的上传数据统计?

des4xlb0  于 2022-11-03  发布在  Go
关注(0)|答案(2)|浏览(175)

在用户文档中,我已经注册了用户。我想通过API显示最近7天的统计数据。第一天- 7个用户,第二天- 5个用户,第三天- 3个用户...... UserSchema包含- name,email,createdAt等。我如何在Mongodb/mongoose中做到这一点?
样本数据:

{
        "_id": "612fa439ddb04331d6ea1e5d",
        "name": "imran-1630512185253",
        "createdAt": "2021-09-01T16:03:05.266Z",
    },
     {
        "_id": "612fa439ddb04331d6ea1e5d",
        "name": "imran-1630512185253",
        "createdAt": "2021-08-31T16:03:05.266Z",
    },
    ...........

预期输出:

"filterData" : {
        1st day: 3,
        2nd day: 5,
        3rd day: 3,
        4th day: 8,
        ...
     }

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

p4rjhz4m

p4rjhz4m1#

你可以这样做

var d = new Date();
d.setDate(d.getDate()-7);

然后

users.find({"createdAt": { $gt: d }})
bq3bfh9z

bq3bfh9z2#

您所描述的查询是将一系列包含UTC日期时间的文档按天分组。
MongoDB在内部将日期/时间存储为自1970年1月1日以来的毫秒数,因此第一步需要计算每个文档的起始日期,然后按该起始日期值进行分组。
如果您使用的是MongoDB 5.0,则可以使用$dateTrunc操作符:

{$dateTrunc:{date:"$createdAt",unit:"day",timezone:"America/New_York"}}

对于旧版本,您可以计算表示日期开始的日期对象,或建立只包含日期的字串。
对于字符串选项:

{$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按一天的开始,计算发生的次数
  • 将文档转换为所需格式的其他阶段

相关问题