sql >> Database >  >> NoSQL >> MongoDB

Hoe vind je alle datumbereiken die een ander datumbereik overlappen in MongoDB?

Ik denk dat u documenten probeert te vinden met overlappende perioden. Met andere woorden elk document waarvan start of end datums vallen tussen het opgegeven datumbereik.

Je kunt dit zeker bereiken met een beetje match en logica.

Laten we aannemen dat ik twee documenten in mijn collectie heb

{ 
    "_id" : ObjectId("56f692730c96eddb0a2c287e"), 
    "start" : "2015-03-27T15:00:00.000Z", 
    "end" : "2015-03-27T17:00:00.000Z"
}
{ 
    "_id" : ObjectId("56f6928c0c96eddb0a2c287f"), 
    "start" : "2015-03-27T16:00:00.000Z", 
    "end" : "2015-03-27T27:00:00.000Z"
}

Wanneer ik het volgende stukje code uitvoer

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}, end:{$gte: startDate}}
     ]
  });
};

printjson(findOverlapingDates(startDate, endDate).toArray());

ik snap

[
    {
        "_id" : ObjectId("56f6928c0c96eddb0a2c287f"), 
        "start" : "2015-03-27T16:00:00.000Z", 
        "end" : "2015-03-27T27:00:00.000Z"
    }
]

Dat is een overlappend document voor een bepaald datumbereik. Hoop dat het allemaal zin heeft. Voor de beste prestaties raad ik aan om index op beide start en end velden.




  1. mangoest een object uit een geneste array verwijderen

  2. Verkrijg de set van alle unieke waarden in het matrixveld

  3. mongodb meerdere aggregaties in één bewerking

  4. Redis gebruiken als cache voor een mysql-database