sql >> Databáze >  >> NoSQL >> MongoDB

Jak najít všechna časová období překrývající se s jiným časovým obdobím v MongoDB?

Domnívám se, že se snažíte najít dokumenty s překrývajícími se obdobími. Jinými slovy jakýkoli dokument, jehož start nebo end data spadají do daného období.

Určitě toho můžete dosáhnout s trochou shody a logiky.

Předpokládejme, že mám ve sbírce dva dokumenty

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

Když spustím následující část kódu

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

Chápu

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

Což je překrývající se dokument pro dané časové období. Doufám, že to všechno dává smysl. Pro nejlepší výkon doporučuji mít index na obou start a end pole.




  1. Chcete-li vypočítat věk v MongoDB, převeďte rozdíl data na roky

  2. Vytváření prázdné kolekce v mongodb

  3. Získejte poslední vložené ID dokumentu v MongoDB pomocí ovladače Java

  4. SQL LPAD()