У меня есть кусок кода в 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.info(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.info(pto.length)
}
Журнал консоли всегда равен 0.
В текущей БД существуют следующие объекты:
ДатаЗапрос : 09.03.19, ДатаReq : 08.03.19, ДатаReq : 20.10.18, ДатаReq: 15.11.18
Первая функция должна подсчитывать количество записей, существующих между 2018 и 2019 годами, и делает это правильно, находя два элемента. Вторая функция должна подсчитывать количество записей, существующих между 2017 и 2018 годами, но даже если данные существуют, их невозможно найти. Есть идеи, что здесь может быть не так?
Я предполагаю, что вы имеете в виду строки DateReq? Прошу прощения за неточность, я поленился, так как на самом деле они хранятся так: "dateReq" : ISODate("2019-03-09T15:16:32.405Z"),



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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