我有一个mongodb集合,其中每个文档都有一些属性和utc时间戳.我需要从集合中提取数据并使用聚合框架,因为我使用集合中的数据在用户界面上显示一些图表.但是,我需要根据用户的时区进行聚合.假设我知道用户的时区(从浏览器或以其他方式传入请求),有没有办法使用聚合框架根据[客户机的]时区进行聚合?
我有一个mongodb集合,其中每个文档都有一些属性和utc时间戳.我需要从集合中提取数据并使用聚合框架,因为我使用集合中的数据在用户界面上显示一些图表.但是,我需要根据用户的时区进行聚合.假设我知道用户的时区(从浏览器或以其他方式传入请求),有没有办法使用聚合框架根据[客户机的]时区进行聚合?
你的要求目前正在MongoDB issue SERVER-6310人中讨论.
我在a discussion thread的链接中找到了这个.
这个问题在任何按日期分组的情况下都很常见,包括SQL数据库和NoSQL数据库.事实上,我最近在RavenDB直面了这个问题.有一个很好的问题描述和RavenDB解决方案here.
MongoDB问题讨论了一种变通方法,类似于我在上面的 comments 中所描述的.你预先计算出你感兴趣的当地时间,然后根据这些时间分组.
这两种方法都很难覆盖世界上的每个时区.你应该 Select 一些对你的用户群有意义的目标区域,比如我在RavenDB文章中描述的按办公室划分的方法.
UPDATE: This issue was solved in MongoDB in July 2017 (version 3.5.11).在上面的第一个链接中描述了解决方案,但简而言之,他们为聚合表达式中的日期引入了一种新的对象格式:{ date: <dateExpression>, timezone: <tzExpression> }
,它允许您在聚合时指定要使用的时区.Mongo文档中的另一个例子见here.