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

Node.js 为什么按时间范围查询mongoDB不起作用?,node.js,mongodb,timestamp,date-format,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}; }

我试图从在特定时间间隔内具有某些时间属性的
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: 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

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

如何指定模型上的模式?此处的字段是否设置为日期?请求的字符串输入是什么?尽可能多地记录并输入这些值。如果它实际上在两个不同的字段上,那么也不是真正的“范围”。考虑到这一点,您的逻辑可能不正确。是的,它是
Date
。参见我的编辑我的目的是让
timeFrom
timeTo
范围在请求查询中指定的范围内。给人们一些应该选择的示例文档。这样,其他人可以更容易地与您一起调试。如何指定模型上的模式?此处的字段是否设置为日期?请求的字符串输入是什么?尽可能多地记录并输入这些值。如果它实际上在两个不同的字段上,那么也不是真正的“范围”。考虑到这一点,您的逻辑可能不正确。是的,它是
Date
。参见我的编辑我的目的是让
timeFrom
timeTo
范围在请求查询中指定的范围内。给人们一些应该选择的示例文档。这样,其他人可以更容易地与您一起调试。