MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como encontrar todos os intervalos de datas sobrepostos a outro intervalo de datas no MongoDB?


Acredito que você esteja tentando encontrar documentos com intervalos de datas sobrepostos. Em outras palavras, qualquer documento cujo start ou end datas está entre um determinado intervalo de datas.

Você pode definitivamente conseguir isso com um pouco de correspondência e lógica.

Vamos supor que eu tenha dois documentos em minha coleção
{ 
    "_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"
}

Quando executo o seguinte trecho de código
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());

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

Qual é o documento sobreposto para determinado intervalo de datas. Espero que tudo faça sentido. Para melhor desempenho, recomendo ter índice em ambos start e end Campos.