【问题标题】:Mongoose query date rangeMongoose 查询日期范围
【发布时间】:2021-01-02 06:45:12
【问题描述】:

我将日期存储在我的 mongo DB 数据库中

date: new Date()

这是模型上的字段

date: {type: Date, required: true},

它存储成功,在 DB 2020-09-14T15:28:19.462+00:00 中看起来像这样

然后我想像这样查询两个日期之间的文档

router.put('/filter',  (req, res, next) =>{
      //console.log(req.body.dateOne.year)
      //console.log(req.body.dateTwo.year)
      var d = new Date(2020, 09, 1);

      var endd = new Date(2020, 09, 30);

        History.find({"date":  {$gte: d, $lte: endd}}).then(documents =>{
        
        if (documents.length >= 1){

        res.status(200).json({
            message: "Got History",
            posts: documents
        });
        } else{
            res.status(404).json({
                message: "Nothing matches",
             
            });
        }

        });
  
  });

它总是不返回任何文档,我查看过类似的堆栈溢出问题,其他人提到这是因为日期正在存储时间,所以尝试将时间添加到日期也像这样

var d = new Date(2020, 09, 1, 01, 00, 00, 00);

但还是没有运气。

有没有办法只用 javascript 日期对象来做到这一点?还是我需要使用https://date-fns.org/之类的东西?

另外,如果我将开始日期更改为 2019 年而不是 2020 年,它会找到文档吗?不知道为什么?

【问题讨论】:

    标签: javascript mongodb mongoose


    【解决方案1】:

    尝试:

    var d = new Date(2020, 8, 1);
    var endd = new Date(2020, 8, 30);
    

    Date() 中,月份参数从 0 而不是 1 开始计数。

    【讨论】:

    • 难以置信地举起双手!当然,现在就这么简单。谢谢亚历克西斯!
    • 这是反直觉的功能。月份从 0 开始,但天从 1 开始
    猜你喜欢
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 2019-08-16
    • 2014-12-17
    • 2014-01-07
    相关资源
    最近更新 更多