mongodb: запрос свободных временных интервалов в календарной модели - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть модель календаря со следующей схемой (для сохранения статуса транспортного средства в соседних временных интервалах)

  const calendarSchema = new Schema( {
      vehicleId: String,
      startTime: Date,
      endTime: Date,
      availability: {type:String, enum: [ 'Available', 'Booked', 'Partially_Available']
})

Теперь я хотел бы найти автомобили, которые либо Available, либо Partially_Available между 2021-01-01T12:00:00 до 2021-01-01T15:00:00

Для ID транспортного средства: 123 У меня есть следующие документы в коллекции:

{
   vehicleId:123,
   startTime: 2021-01-01T12:00:00,
   endTime: 2021-01-01T13:00:00
   availability: 'Available'
},

{
   vehicleId:123,
   startTime: 2021-01-01T13:00:00,
   endTime: 2021-01-01T14:00:00
   availability: 'Partially_Available'
}
{
   vehicleId:123,
   startTime: 2021-01-01T14:00:00,
   endTime: 2021-01-01T15:00:00
   availability: 'Available'
}

Теперь Как мне написать запрос так, чтобы я получил vehicleId s, который либо Available или Paritally_Available между 2021-01-01T12:00:00 до 2021-01-01T15:00:00

Это означает, что если какое-либо транспортное средство имеет статус Booked для каких-либо временных интервалов между этими двумя интервалами, оно не должно появляться в результате. Для вышеприведенного случая vehicleId:123 должно появиться в результате. Если какая-либо из записей выше имела статус Booked, vehicleId:123 не должно появиться в результате.

Заранее благодарю за любое предложение. Последние несколько дней я чесал голову, чтобы найти решение, но пока не смог его найти.

1 Ответ

0 голосов
/ 30 апреля 2020

попробуйте

db.collection.find({
  availability: {
    $in: [ "Available", "Partially_Available" ]
  },
  startTime: {
    $gte: ISODate("2021-01-01T12:00:00.000Z")
  },
  endTime: {
    $lte: ISODate("2021-01-01T15:00:00.000Z")
  }
})

вы можете проверить это здесь Пн go Детская площадка

...