如何按小时聚合 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 库
我在 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 库