如何按小时聚合 MongoDB 个文档?

How can I aggregate MongoDB documents by hour?

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

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

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

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

会是这个:

{ $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