Контекст
Я создаю запрос, в котором пользователь может ввести диапазон дат для поиска документов «Игрок». Запрос должен возвращать любых игроков, чьи даты начала и окончания перекрываются с запрошенными датами. Я делаю это, используя условие ИЛИ, когда либо дата окончания игрока находится после даты начала запроса, либо дата начала игрока предшествует дате окончания запроса. Обе даты в запросе являются необязательными, что позволяет пользователю указывать только дату окончания или дату начала или не возвращать все соответствующие документы.
Задача
Запрос работает, когда указана только одна из двух дат запроса (см. Скриншоты ниже). Однако он возвращает все документы, если указаны обе даты (функционально игнорируя оба параметра запроса).
Код
let query = Player.find({'casino': user.casino});
let queryArray = [];
if(req.body.startDate) {
queryArray.push({playerEndDtm: {$gt: moment(req.body.startDate).toDate()}});
}
if(req.body.endDate) {
queryArray.push({playerStartDtm: {$lt: moment(req.body.endDate).endOf('day').toDate()}});
}
if(queryArray.length > 0) {
query.or(queryArray);
}
Скриншоты
Когда указаны обе даты запроса:
Результаты:
Если указана только 1 дата запроса:
Результаты:
Может кто-нибудь помочь мне определить, что я делаю не так? Спасибо!