我有一个mLab数据库设置并通过Mongoose与它进行交互。我想查询数据库并在10分钟的窗口内返回所有记录。因此,在查询时,它将查看日期字段并在当前日期时间之前的10分钟内以及当前日期时间之后的10分钟内恢复所有记录。
db条目如下所示:
React
我的查询如下:
{
"_id" : ObjectId("572cd34786d87203006a89dc"),
"expecting" : "Chris",
"channel" : "D164Z16BB",
"date" : ISODate("2016-05-06T13:30:00Z"),
"userId" : "U0GMSLZ7C",
"email" : "email@gmail.com",
"userName" : "userName",
"firstName" : "Bob",
"__v" : 0
}
即使db中的条目符合时间条件,它也不会返回任何内容。
发布请求:
var now = new Date();
var later = moment(now).add(15, 'm').toDate();
var earlier = moment(now).subtract(15, 'm').toDate();
Schedules.find({
'date': {
'$gte': earlier,
'$lte': later
}
}, function(err, schedules) {
if(err) res.send(err);
res.json(schedules);
});
答案 0 :(得分:0)
我想这是你的问题,
var now = new Date();
var later = moment(now).add(15, 'm').toDate();
var earlier = moment(now).subtract(15, 'm').toDate();
toDate 返回对象,mongodb可能有字符串。
请改用它。
var later = moment().add(15, 'm').format();
var earlier = moment().subtract(15, 'm').format();
或者您可以将架构设置为日期。
您的数据格式与您搜索的格式不同。
"date": {
"$date": "2016-05-06T10:00:00.000Z"
},
这是错误的条目。你应该总是有这样的东西
"date" : ISODate("2016-04-24T04:50:07Z"),
当您正确传递日期对象时,我们可以这样做。
现在,如果你真的只想要这个结构,你必须将你的查询改为这样的。
{
'data.$date' : {
//gte,
//lte
}
}
答案 1 :(得分:0)
错误结束时我正在保存日期。它将EST时间保存为UTC,而不是将其从EST转换为UTC。因此,查询本身正在运行,因为它使用了正确的时间并且在DB中保存了未转换的时间