sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur hittar man alla datumintervall som överlappar ett annat datumintervall i MongoDB?

Jag tror att du försöker hitta dokument med överlappande datumintervall. Med andra ord alla dokument vars start eller end datum ligger mellan ett givet datumintervall.

Du kan definitivt uppnå detta med lite matchning och logik.

Låt oss anta att jag har två dokument i min samling

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

När jag kör följande kodbit

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

Jag förstår

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

Vilket är överlappande dokument för ett visst datumintervall. Hoppas att allt är vettigt. För bästa prestanda rekommenderar jag att du har index på båda start och end fält.




  1. MongoDB - Överväg att definiera en böna av typen 'org.springframework.data.mongodb.repository.query.MongoEntityInformation' i din konfiguration

  2. Ställ in standarddatum när du infogar dokument med fältet tid. Tid

  3. Redis, Node.js och Socket.io:Korsserverautentisering och förståelse för node.js

  4. phpredis på windows 7 64bit xampp