Мангуст - получить, где диапазоны дат перекрываются - PullRequest
0 голосов
/ 21 декабря 2018

В nodejs с mongoose ORM я пытаюсь сделать запрос, который получает все объекты бронирования, где даты начала и окончания перекрываются с двумя другими датами.

let start = req.params.start;
let end = req.params.end;

Booking.find({
    $or: [{userID: userID}, {invites: userID}],
    $or: [{ $and: [{ start: { $gte: start }}, {start: { $lte: end }}],
      $and: [{start: { $lte: start }}, {end: { $gte: start }}]}
    ]}

e1 start> Запуск e2 И запуск e1 <конец e2 ИЛИ запуск e2> Запуск e1 И запуск e2 <конец e1 </em>

Но это не работает должным образом.Возвращает пустой массив в даты, которые перекрываются

1 Ответ

0 голосов
/ 21 декабря 2018

Вы должны разделить $ и операторы следующим образом:

$or : [{$and:...}, {$and:...}]

не так:

$or : [{$and:... , $and:...}]

В противном случае у вас будет $ или запрос только с одной опцией, что практически невозможно выполнить, поскольку единственный случай, когда это условие будет выполнено, - если начало и конец точно равны входным значениям.

Кроме того, вы все еще пропускаете два из четырех возможныхслучаи, когда вы хотите, чтобы все события пересекались каким-либо образом с данным периодом:

  $and: [{start: { $lte: start }}, {end: { $lte: start }}]}
  $and: [{start: { $gte: start }}, {end: { $gte: start }}]}

enter image description here

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