javascript - 按时间搜索 - MongoDB/NodeJS

标签 javascript node.js mongodb

我有一个文档,时间如下:

 "time" : ISODate("2013-12-31T03:00:00Z")

我目前正在尝试通过 Node.JS 驱动程序使用 MongoDB 查询来查找此文档。

var time = new Date(2013,11,31,3,0,0,0);

这个日期使用 console.log() 打印如下

Tue Dec 31 2013 03:00:00 GMT-0500 (EST)

当我尝试使用标准 collection.findOne 查找此文档时(我肯定查询本身不是问题,而是时间戳),它找不到文档。 Mongo shell 显示文档存在。我如何错误地格式化我的时间?

编辑: 我也会添加查询。

collection.findOne(
        {
         "time" : time},
        {"_id" : 0},
        function(err, items){
            if (err){
                throw err;
            }
            console.log(err);
            console.log(items);
            res.send(items);
    });

最佳答案

您遇到时区问题。您要查找的时间戳是 2013-12-31T03:00:00Z,尾随 Z 表示“零时区偏移”。但是您正在使用的 new Date 版本:

var time = new Date(2013,11,31,3,0,0,0);

解释当前时区中的所有这些值。如果我们查看您的 console.log 输出:

Tue Dec 31 2013 03:00:00 GMT-0500 (EST)

我们可以看到您处于 EST 时区,并且您的 time 是 EST 中的 03:00 而不是 03:00 在 UTC 中。

可能最简单的方法是使用 Date.UTC在创建 Date 实例之前将您的组件转换为 UTC:

var time = new Date(Date.UTC(2013,11,31,3,0,0,0));

现在您的 time 应该有 2013-12-31T03:00:00Z 并且您的查询应该会更好地工作。

关于javascript - 按时间搜索 - MongoDB/NodeJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20851971/

相关文章:

javascript - 脚本不将信息从下拉列表发布到文本框

javascript - backbone.js 模型不触发事件

javascript - 如何在node js客户端缓存.js文件

java - 如何提高从oracle到mongodb的数据迁移性能

mongodb - MongoDB 中新插入的文档肯定比旧文档具有 "bigger"_id 吗?

php - 如何用javascript删除引号之间的字符串内容?

javascript - 使用 JavaScript 围绕其中心旋转一个三 Angular 形

node.js - Nodejs 应用程序在本地运行,但在部署时无法运行

javascript - 不存在的属性(property) : EventEmitter memory error instead of proper error message

javascript - 如何在 Mongoose 中获得多个结果并将其合并为一个响应