我有一个 mongodb 集合,其中每个文档都有一些属性和一个 utc 时间戳。我需要从集合中提取数据并使用聚合框架,因为我使用集合中的数据在用户界面上显示一些图表。但是,我需要根据用户的时区进行聚合。假设我知道用户的时区(通过浏览器的请求或以其他方式传递),有没有办法使用聚合框架根据 [client's] 时区进行聚合?
最佳答案
除了 Matt Johnson 提到的 SERVER-6310 之外,另一种解决方法是使用 $project
运算符来添加或减去 UTC 时区,以将时间“转移”到正确的本地区。事实证明,您可以以毫秒为单位增加或减少时间。
例如,假设我有一个名为 orderTime
的日期字段。我想查询 EDT。那是距 UTC 的 -4 小时。那是 4 * 60 * 60 * 1000 毫秒。
因此,我将编写以下投影以获取本地时间的 day_ordered
以获取我的所有记录:
db.table.aggregate(
{ $project : { orderTimeLocal : { $subtract : [ "$orderTime", 14400000] } } },
{ $project : { day_ordered : { $dayOfYear : "$orderTimeLocal" } } })
https://stackoverflow.com/questions/18287493/