Элементы в моей базе данных имеют массив множественного резервирования, который представлен объектом с двумя элементами, start и end.Пример:
"resa": [
{
"_id": "5cf2a38372373620263c84f1",
"start": "2019-06-01T15:23:00.000Z",
"end": "2019-06-01T16:23:00.000Z"
},
{
"_id": "5cf2a3a772373620263c84f2",
"start": "2022-03-05T16:23:00.000Z",
"end": "2022-03-05T17:23:00.000Z"
}
]
мой фильтр должен возвращать объекты, если указанные даты не пересекают какие-либо диапазоны в массиве resa объекта
Моя попытка зашла так далеко:
Room.find({
$or: [
{ $and: [{ resa: { $elemMatch: { start: { $lt : req.query.start } } } },{ resa: { $elemMatch: { end: { $lt : req.query.start } } } }] },
{ $and: [{ resa: { $elemMatch: { start: { $gt : req.query.end } } } },{ resa: { $elemMatch: { end: { $gt : req.query.end } } } }] }
]
},
моя логика заключается в том, что для каждой начальной и конечной даты в данном ресурсе для каждого элемента:
- запрошено начало ниже, чем каждое зарегистрированное начало и запрошено конец ниже, чем каждое зарегистрированное начало
или
- запрошено начало больше, чем каждое зарегистрированноеend и запрошено end больше, чем каждый зарегистрированный конец
моя комната доступна в данный период времени.
Do i 'Вы что-то упустили из-за работы какого-то оператора $ query в Монго или существует более логичный способ применения этого фильтра?