Фильтр Монго, чтобы определить, пересекает ли данный диапазон дат один из диапазонов, содержащихся в массиве - PullRequest
0 голосов
/ 01 июня 2019

Элементы в моей базе данных имеют массив множественного резервирования, который представлен объектом с двумя элементами, 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 в Монго или существует более логичный способ применения этого фильтра?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...