#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, и после этого все работало правильно.