我有一个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.

Mongodb相关问答推荐

在MongoDB查询中添加来自另一个集合的匹配文档的计数

MongoDB$unionWith,如何 Select 特定文档

聚合管道可以用于更新数据库中的文档吗?

尽管前一阶段输出文档,$group stage 仍返回零文档

如何在 MongoDB 中对字段进行自定义排序

定期自动轮换 MongoDb 集合

在mongodb中,如何使用聚合来获取字段之间的对应关系

使用 homebrew 和 Xcode 8.1.1 安装 Mongodb 失败

为什么 local.oplog.rs 上每隔几分钟的活动就会锁定 mongo 客户端

如何在mongo中插入带有日期的文档?

mongodb - 查找具有最接近整数值的文档

Clojure 和 NoSQL 数据库

当前的 URL 字符串解析器已弃用

Mongodb KeyFile 太开放权限

查询 Mongoid/rails 3 中的嵌入对象(Lower than、Min 运算符和排序)

mongodb: UnknownError assertion src/mongo/db/server_options_helpers.cpp:355

Mongoose 版本控制:when is it safe to disable it?

如何从mongoose中的对象 ID 获取创建日期?

如何在 Ubuntu 10.04 中使用 --auth 选项重新启动 mongodb?

MissingSchemaError:Schema hasn't been registered for model