обновление :
новое решение : идеальное решение Логика: (Макс (StartA, StartB) <= Мин (EndA, EndB) </p>
старое решение:
, если вы хотите найти, что данный слот уже заполнен
st = заданное время начала в timstamp et = время давности в timstamp
db.getCollection('exam').find({
$or : [
{
$and : [
{"startTimeStamp": {"$gte": st, "$gte":et },
{"endTimeStamp": {"$gte": st, "$gte":et }}
]
},
{
$and : [
{"startTimeStamp": {"$lte": st, "$lte": et }},
{"endTimeStamp": {"$lte": st, "$lte": et}}
]
}
]
})
explaination
:
Пример:
, которые описаны ниже:
3am |------------------| 5am
2am|---------------|4am
поэтому он не должен вставлять в БД, потому что, если он вставляет сейчас, то когда мы выбираем, он дает несколько данных за некоторый период времени.
так что я сделал, я проверил в первую очередь и условие, что st и etбольше, чем startTimestamp, а также endtime больше, чем st и et, затем в другом и проверяется условие, если оба времени меньше startTime и Endtime,
, поэтому, если данные плохи, чем целое условие становится ложным, в противном случае любое одно условие становится True.
[Примечание: он решает все четыре условия.]
обновление : (более короткое решение)
(Max(StartA, StartB) <= Min(EndA, EndB)