Jeg tror, du forsøger at finde dokumenter med overlappende datointervaller. Med andre ord ethvert dokument, hvis start
eller end
datoer ligger mellem et givet datointerval.
Du kan helt sikkert opnå dette med lidt match og logik.
Lad os antage, at jeg har to dokumenter i min samling
{ "_id" :ObjectId("56f692730c96eddb0a2c287e"), "start" :"2015-03-27T15:00:00.000Z", "end" :"2015-03-27T17.000:"}{ "_id" :ObjectId("56f6928c0c96eddb0a2c287f"), "start" :"2015-03-27T16:00:00.000Z", "end" :"2015-03-27T27:00Z:00"}
Når jeg udfører følgende stykke kode
var startDate ="2015-03-27T20:00:00.000Z";var endDate ="2015-03-27T21:00:00.000Z";var findOverlapingDates =function(startDate, endDate){ return db .collection.find({ $or:[ {$and:[ {start:{$gte:startDate}}, {start:{$lte:endDate}} ]}, {start:{$lte:startDate}, slut :{$gte:startDato}} ] });};printjson(findOverlapingDates(startdato, slutdato).toArray());
Jeg forstår
[ { "_id" :ObjectId("56f6928c0c96eddb0a2c287f"), "start" :"2015-03-27T16:00:00.000Z", "end" :"2015-03-27T2007.00:Z" }]
Hvilket er overlappende dokument for et givet datointerval. Håber det hele giver mening. For den bedste ydeevne vil jeg anbefale at have indeks på begge start
og end
felter.