ExpressJS:基于今天日期 yyyy-mm-dd 的 ISO DATE Mongoose 查询

ExpressJS: Mongoose query on ISO DATE based on todays date yyyy-mm-dd

我有这样的约会

"createdAt": "ISODate('2021-07-07T06:41:46.000Z')"

我在下面写了猫鼬查询来获取今天的记录。但是下面的查询是空的。

let meeting = await Meeting.find({
     createdAt :  {$lt: new Date().toISOString(),$gte: new Date().toISOString()}
});

我尝试了以下另一种使用静态日期的方法,它奏效了。我想获取动态今天的数据。

let meeting = await Meeting.find({ 
  createdAt : {
  '$eq': new Date('2021-07-07T06:41:46.000Z')
   }
});

谁能帮我解决这个问题

我假设“createdAt”字段的类型在 Mongoose 模式中是 Date(如果不是这种情况,您应该转换为 Date)。

逻辑

当你想过滤特定日期的文档时,可以使用条件:

0:00 the day <= createdAt < 0:00 the following day

例如,要过滤 07/07/2021 的会议,条件将为:

0:00 07/07/2021 <= createdAt < 0:00 08/07/2021

编码

考虑到这个逻辑,代码就非常简单了:

let today = new Date();
today.setHours(0,0,0,0); // set to 0:00

let tomorrow = new Date(today)
tomorrow.setDate(tomorrow.getDate() + 1)

let meeting = await Meeting.find({
     createdAt :  {$gte: today, $lt: tomorrow}
});

当使用 date/time 值时,我推荐 moment.js 库。可能是这个:

let meeting = await Meeting.find({
   createdAt :  {
     $gte: moment().startOf('day').toDate(), 
     $lte: moment().endOf('day').toDate()
   }
});