MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie finde ich alle Datumsbereiche, die sich mit einem anderen Datumsbereich in MongoDB überschneiden?

Ich glaube, Sie versuchen, Dokumente mit sich überschneidenden Datumsbereichen zu finden. Mit anderen Worten jedes Dokument, dessen start oder end Daten liegen zwischen dem angegebenen Datumsbereich.

Sie können dies definitiv mit ein wenig Übereinstimmung und Logik erreichen.

Nehmen wir an, ich habe zwei Dokumente in meiner Sammlung

{ 
    "_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"
}

Wenn ich folgenden Codeabschnitt ausführe

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());

Ich bekomme

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

Welches ist ein überlappendes Dokument für einen bestimmten Datumsbereich. Hoffe es macht alles Sinn. Für die beste Leistung empfehle ich, einen Index auf beiden start zu haben und end Felder.