MongoDB, сравнивающий даты, работает непоследовательно

#javascript #mongodb

#javascript #mongodb

Вопрос:

У меня есть фрагмент кода в MongoDB / javascript, который иногда работает, но в других случаях нет. Когда я перехожу к сравнению дат, этот код работает:

     let year = new Date().getFullYear();
    User.aggregate([ 
        { $match: { emplyID: Number(req.params.emplyID) } },
        { $match: { "dateReq": { $gte: new Date(year, 0, 1), $lt: new Date(year 1, 0, 1) } } }
 ], function (err, pto) {
console.log(pto.length)
 }
  

Результаты журнала консоли = 2

Однако это не работает:

 let year = new Date().getFullYear();
    User.aggregate([ 
        { $match: { emplyID: Number(req.params.emplyID) } },
        { $match: { "dateReq": { $gte: new Date(year - 1, 0, 1), $lt: 
new Date(year, 0, 1) } } }
 ], function (err, pto) {
console.log(pto.length)
 }
  

Журнал консоли всегда равен 0.

В текущей базе данных эти объекты существуют:

DateReq: 3/9/19, DateReq: 3/8/19, DateReq: 20.10.18, DateReq: 15.11.18

Предполагается, что первая функция подсчитывает количество записей, существующих в период с 2018 по 2019 год, и делает это правильно, находя два элемента. Предполагается, что вторая функция подсчитывает количество записей, существующих в период с 2017 по 2018 год, но, несмотря на то, что данные существуют, их невозможно найти. Есть идеи, что здесь может пойти не так?

Комментарии:

1. Это неправильные даты, они кажутся произвольными строками дат. Не ожидайте, что произвольные строки дат будут обрабатываться так, как вы ожидаете от них.

2. Я полагаю, вы имеете в виду строки DateReq? Прошу прощения за неточность, я был ленив, поскольку на самом деле они хранятся следующим образом: «dateReq»: ISODate(«2019-03-09T15:16:32.405Z»),

Ответ №1:

Я понял это, и это не имело никакого отношения к сравнению дат MongoDB. Вместо этого мне не удалось предоставить req.params.emplyID, как это было в первом запросе. На самом деле мне нужно было использовать req.payload.emplyID, и после этого все работало правильно.