如何按小时聚合 MongoDB 文档?

Posted

技术标签:

【中文标题】如何按小时聚合 MongoDB 文档?【英文标题】:How can I aggregate MongoDB documents by hour? 【发布时间】:2021-10-26 07:20:31 【问题描述】:

我在 MongoDB 5.0.2 中名为“files”的集合中有文档。此集合用于用户上传的内容。我想统计过去 24 小时内以 1 小时为间隔上传的文件数。

例如,用户在 13:00 上传了 3 个文件,在 14:00 上传了 2 个文件,在 15:00 上传了 0 个文件,以此类推。

我已经在我的 Mongo 文档中存储了一个“时间戳”字段,它是来自 javascript 的 ISODate 对象。

我查看了无数的 *** 问题,但找不到任何适合我需要或我理解的问题。

【问题讨论】:

【参考方案1】:

会是这个:

 $match: timestamp: $gt: moment().startOf('hour').subtract(24, 'hours').toDate()   , 
 $group:
  _id: 
    y: $year: "$timestamp",
    m: $month: "$timestamp",
    d: $dayOfMonth: "$timestamp",
    h: $hour: "$timestamp",
  ,
  count: ...

或者在 Mongo 5.0 版中你可以这样做

 $group:
  _id:  $dateTrunc:  date: "$timestamp", unit: "hour"  ,
  count: ...

对于任何与日期时间相关的操作,我推荐moment.js 库

【讨论】:

以上是关于如何按小时聚合 MongoDB 文档?的主要内容,如果未能解决你的问题,请参考以下文章

Mongodb 聚合 - 今天按小时分组

mongodb聚合(转)

MongoDB聚合(aggregate)常用操作及示例

如何在 MongoDB 中聚合时间序列数据

如何在mongodb聚合框架中的管道阶段后加入文档

如何使用MongoDB聚合进行分页?