如何编写 returns 所有日期介于两个日期之间的文档的查询?

How do I write a query that returns all documents whose date is between two dates?

我有一个事件数据库,我想查找给定月份的所有事件。我采用的方法是查找日期大于 2015 年 2 月 1 日且小于或等于 2015 年 2 月 28 日的所有事件。这是我的代码:

var start = '2015-02-01T00:00:00:000Z';
var end = '2015-02-28T00:00:00:000Z';
Event
    .find({
        'start_date': {
            '$gte' : start,
            '$lte' : end
        }
    })
    .sort({start_date: 1})
    .exec(function (err, data) {
    if (err) {
        console.log('ERROR = ' + err);
    } else {
        month = data;
        console.log('month' = JSON.stringify(month));
        ... // do other stuff
    }
});

我的查询返回时总是空的,即使我的数据库中有应该返回的记录。我做错了什么?

更新-------------------------------------------- ------------

这是我正在使用的架构:

var eventSchema = mongoose.Schema({
    title : String,
    details : String,
    start_date : Date,
    end_date : Date,
    created : {
        type: Date,
        default: Date.now
    }
});

关于如何解决这个问题的很好的解释可以在文章 Querying for a Date Range (Specific Month or Day) 中找到,它基本上建议您构造 Date 实例来表示用于执行范围查询的月份的开始和结束(轴承请记住,在 Date() 构造函数中,月份参数是基于 0 的索引,即从 0 开始计数,而不是 1。另一方面,天从 1 开始计数):

var start = new Date(2015, 1, 1);
var end = new Date(2015, 2, 1);

Event.find({
        'start_date': {
            '$gte' : start,
            '$lt' : end
        }
    })
    .sort({start_date: 1})
    .exec(function (err, data) {
    if (err) {
        console.log('ERROR = ' + err);
    } else {
        month = data;
        console.log('month' = JSON.stringify(month));
        ... // do other stuff
    }
});

您也可以尝试使用 ISODate 进行查询,看看是否有所不同:

'start_date': {
     $gte: ISODate("2015-02-01T00:00:00.000Z"),
     $lt: ISODate("2015-02-28T00:00:00.000Z")
 }