我有一个MongoDB分析样式的集合。它包含带有timestamp
字段和各种数据的文档。现在我想通过一个粒度参数来获得一段时间的文档数量。MongoDB聚合:具有粒度的时间序列
我目前使用这样的聚合框架(假设粒度DAY
):
db.collection.aggregate([{
$match: {
timestamp: {
$gte: start_time,
$lt: end_time
}
}
}, {
$group: {
_id: {
year: { $year: '$timestamp' },
month: { $month: '$timestamp' },
day: { $dayOfMonth: '$timestamp' }
},
count: { $sum: 1 }
}
}, {
$sort: {
_id: 1
}
}])
这样,我有每天count
值。 问题是count
将取决于计算$dayOfMonth
部分时使用的时区(每个count
从00:00:000 UTC到UTC:23:59:999)。
我希望能够实现这一点,而不依赖于时区,但依靠start_time
。例如,如果我在UTC时间07:00使用start_time
,则我将在UTC时间07:00到第二天07:00 UTC的每一天获得count
s。
TL; DR:我想是这样的:https://dev.twitter.com/ads/reference/get/stats/accounts/%3Aaccount_id/campaigns
关于如何执行此任何想法?
不知道我明白你的意思取决于时间戳。 Mongo将所有日期存储为UTC,因此所有内容都位于同一时区。 –
日期存储为UTC,因此如果使用$ dayOfMonth聚合运算符,则会获得UTC日期。现在,如果你想在不同的时区dayOfMonth,你不能。 更一般地说,我想获得24小时间隔的计数值(不依赖于任何时区,例如从昨天凌晨1:30到今天凌晨1:30)。 – Owumaro