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

Mongoose query to pull data between two datetimes

本文关键字:时间 日期 之间 提取 数据 两个 查询 Mongoose      更新时间:2023-09-26

我设置了一个mLab数据库,并通过Mongoose与之交互。我想查询数据库并在10分钟内返回所有记录。因此,在查询时,它将查看日期字段,并在当前日期时间之前10分钟内和当前日期时间之后10分钟内带回所有记录。

数据库条目如下所示:

{ 
  "_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 
}

我的查询看起来像:

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);
});

即使数据库中有一个条目符合时间标准,它也不会返回任何内容。

张贴请求:

apiRouter.post('/', function(req, res) {
    console.log(req.body);
    var schedule = new Schedules();
    schedule.firstName = req.body.firstName;
    schedule.real_name = req.body.real_name;
    schedule.userName = req.body.userName;
    schedule.email = req.body.email;
    schedule.userId = req.body.userId;
    schedule.date = req.body.date;
    schedule.channel = req.body.channel;
    schedule.expecting = req.body.expecting;
    schedule.save(function(err, schedule) {
        if (err) res.send(err);
        res.json({message: 'Schedule was created'});
    });
});

我想这是你的问题,

 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
                   }
}

错误发生在我保存日期的时候。它将EST时间保存为UTC,而不是将其从EST转换为UTC。因此,查询本身工作正常,因为它使用了正确的时间,并且在DB 中保存了一个未转换的时间