【问题标题】:ExpressJS: Mongoose query on ISO DATE based on todays date yyyy-mm-ddExpressJS:基于今天日期 yyyy-mm-dd 在 ISO DATE 上的 Mongoose 查询
【发布时间】:2021-09-18 07:14:58
【问题描述】:

我有这样的约会

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

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

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

谁能帮我解决这个问题

【问题讨论】:

    标签: node.js mongodb express mongoose mongoose-schema


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      逻辑

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

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

      例如,要过滤 2021 年 7 月 7 日的会议,条件为:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-06
        • 2021-08-22
        • 1970-01-01
        • 1970-01-01
        • 2016-07-24
        • 2016-01-02
        • 1970-01-01
        相关资源
        最近更新 更多