node.js - 为什么按时间范围查询mongoDB不起作用?

标签 node.js mongodb timestamp date-format

我正在尝试从 mongoDB 中提取数据,该数据在特定时间间隔内具有一些时间属性。过滤器由请求查询字符串定义:

var getLessonByParams = function (req, res, next){
    console.log(req.query.timeFrom);    
    if(req.query.timeFrom !== undefined){
        req.query.timeFrom = {$gte: req.query.timeFrom};
    }
    if(req.query.timeTo !== undefined){
        req.query.timeTo = {$lte: req.query.timeTo};
    }
    console.log(req.query);         
    LessonModel.find(req.query,  function (err, lessons){
        if(!err){           
            res.status(200).json(lessons);
        }
        else{
            return next(errorHelper(err));
        }
    });
};

但是,显然有问题,因为它返回了我指定的时间之前的数据,并且没有返回它应该返回的一些记录。有什么想法吗?

编辑:

传入查询变量:

2015-08-01T01:15:00.000Z

替换gte后查询:

{ timeFrom: { '$gte': Sat Aug 01 2015 03:15:00 GMT+0200 (CEST) } }

Mongoose 输出:

Mongoose: lessons.find({ timeFrom: { '$gte': new Date("Sat, 01 Aug 2015 01:15:00 GMT") } }) { fields: undefined }  

我正在使用的文档:

{
"_id" : ObjectId("55d1db90daea17d3e90a3c4d"),    
"timeFrom" : ISODate("2015-08-01T01:15:00.000Z"),
"timeTo" : ISODate("2015-08-01T02:15:00.000Z")
}


{
"_id" : ObjectId("55d1ee1cdaea17d3e90a3c53"),
"timeFrom" : ISODate("2015-08-01T01:45:00.000Z"),
"timeTo" : ISODate("2015-08-01T02:30:00.000Z")
}

{
"_id" : ObjectId("55d73b10de2699c615778bd8"),

"timeTo" : "2015-08-02T06:45:00.000Z",
"timeFrom" : "2015-08-02T05:15:00.000Z",

}

最佳答案

事实证明(正如我所怀疑的那样)这是一个格式问题。某些记录将这些日期存储为字符串,而它们应存储为 ISODate

关于node.js - 为什么按时间范围查询mongoDB不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32207999/

相关文章:

node.js - 在node.js中将stdout作为fd获取

mongodb - 如何使用 mgo 和 Go 查询 MongoDB 的日期范围?

mongodb - 从 Entity Framework 移植到 MongoDB

node.js - 我们如何在从 UI 传递到后端服务器时隐藏身份验证凭据等信息?

javascript - 当进程崩溃时,Nodemon 丢失控制台输出

python - 使用 Pymongo 从 Windows 连接到 AWS 实例上的 MongoDB

git - 如果我通过 git rebase --interactive 拆分提交,如何保留时间戳?

Java将毫秒添加到毫秒时间戳省略周末和节假日

database - Sqlite,从当前时间减去日期实体

javascript - 发送 Nodejs 帖子时未定义