【问题标题】:How can I aggregate MongoDB documents by hour?如何按小时聚合 MongoDB 文档?
【发布时间】: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 对象。

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

【问题讨论】:

    标签: mongodb mongoose aggregation


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2014-02-15
      • 2014-08-10
      • 2020-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-04
      • 2021-07-21
      相关资源
      最近更新 更多