如何编写 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")
}
我有一个事件数据库,我想查找给定月份的所有事件。我采用的方法是查找日期大于 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")
}