sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan finder man alle datointervaller, der overlapper et andet datointerval i MongoDB?

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.




  1. Hvad er den rigtige måde at arbejde med ISODate på i Mongoose

  2. Java MongoDB POST:415 ikke-understøttet medietype

  3. hvordan indekserer man et brugernavn i mongo uden store og små bogstaver?

  4. Errr 'mongo.js:L112 Fejl:kunne ikke oprette forbindelse til server 127.0.0.1:27017 på src/mongo/shell/mongo.js:L112'