Mongoose查询在两个日期时间之间提取数据

时间:2016-05-06 14:15:03

标签: javascript node.js mongodb mongoose

我有一个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);
});

2 个答案:

答案 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中保存了未转换的时间