【发布时间】:2015-11-26 00:06:30
【问题描述】:
我有一个 MongoDB 分析风格的集合。它包含带有timestamp 字段和各种数据的文档。现在我想获得一个时间序列,其中包含具有粒度参数的时间段内的文档数。
我目前正在使用这样的聚合框架(假设粒度为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 值。
问题是 counts 将取决于计算 $dayOfMonth 部分时使用的时区(每个 count 是从 00:00:000 UTC 到 23:59:999 UTC)。
我希望能够在不依赖时区的情况下实现这一目标,而是依赖start_time。
例如,如果我在 07:00 UTC 使用 start_time,我将在每天 07:00 到第二天 07:00 UTC 收到 counts。
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)。
标签: mongodb aggregation-framework