使用mongo $ hour检索本地时间信息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用mongo $ hour检索本地时间信息相关的知识,希望对你有一定的参考价值。

我目前在mongob模型的帮助下将文档存储在mongodb中。按日期查询工作正常,但是当我尝试应用$ hour运算符时,似乎返回ISO时间,而不是本地时间。

当前的命名约定为我提供了一个文件名,其中包含创建文件的时间戳:YYYYMMDDHHMMSS-foo-bar.file

示例:DB中的导入导致解析时间戳的以下值:2014 04 02 07 57 33-foo-bar.file被解析为ISODate("2014-04-02T05:57:33Z")

当我查询找到这个项目时:我创建这样的新日期对象(日期是假的,只是为了我选择的查询方法):

var begin = new Date(2014, 01, 10, 13, 00, 00);
var end = new Date(2014, 01, 10, 20, 00, 00);

db.pinas.aggregate([{
    $project: {
        [attributes I need...]
    }
, {
    $match: {
        'start_time': {
            $gte: begin, //ISODate
            $lt: end //ISODate
        }
    }
}]);

再次,这些ISOD似乎不存储时区信息,虽然in this post ISODates包含一些东西:注意尾随+01:00 ISODate("2012-07-14T01:00:00+01:00")

现在我有两个问题/问题:

我在某处读到,在ISODates中返回datetime信息的重点是将“精细工作”转移到应用程序而不是DBMS,这是真的:它在解析ISODatestring的情况下工作,我检索正确的时间(I通过了解我的本地设置来假设?如果服务器在另一个时区怎么办?)

当我想使用$hour日期聚合运算符时,我该如何将它带回当地时间?当我只返回$ hour时,它是如何工作的?

答案

从版本3.6开始,您可以添加时区属性以在正确的时间内获取小时:

{ date: <dateExpression>, timezone: <tzExpression> }

例如:

{ $hour: {
    date: new Date("August 14, 2011Z"),
    timezone: "America/Chicago"
} }

有关详细信息,请参阅$ hour documentation https://docs.mongodb.com/manual/reference/operator/aggregation/hour/

另一答案

除了UTC之外,MongoDB不支持任何时间。您需要在其他时区完成任何操作需要在客户端完成,因此您需要将MongoDB提供的$hour值调整为您自己代码中的本地时间。

请参阅日期的getTimezoneOffset()方法,并注意夏令时。

不理想,但就是这样。

以上是关于使用mongo $ hour检索本地时间信息的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Mongo Java驱动程序从集合中检索随机文档

如何使用 Sails.JS + GridFS 从 Mongo 检索图像文件?

如何将所有 Meteor Mongo 集合名称检索为 Javascript 数组?

Mongo“身份验证失败”仅适用于远程连接。本地工作正常

Elasticsearch全文检索技术 一篇文章即可从入门到精通(Elasticsearch安装,安装kibana,安装ik分词器,数据的增删改查,全文检索查询,聚合aggregations)(代码片

Mongo:如何仅检索与某些属性匹配的子文档