MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak znaleźć wszystkie zakresy dat nakładające się na inny zakres dat w MongoDB?

Wydaje mi się, że próbujesz znaleźć dokumenty z nakładającymi się zakresami dat. Innymi słowy każdy dokument, którego start lub end daty mieszczą się w podanym zakresie dat.

Z pewnością możesz to osiągnąć przy odrobinie dopasowania i logiki.

Załóżmy, że mam w swojej kolekcji dwa 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"
}

Kiedy wykonuję następujący fragment kodu

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

dostaję

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

Który dokument pokrywa się z podanym zakresem dat. Mam nadzieję, że to wszystko ma sens. Aby uzyskać najlepszą wydajność, polecam mieć indeks na obu start i end pola.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoose &Express:Jak prawidłowo usuwać, tworzyć i przechowywać dane, które są odniesieniami?

  2. Wyświetlanie ostatniej wiadomości z każdej rozmowy z udziałem użytkownika w MongoDB

  3. Obiekt #<MongoClient> nie ma metody „open”

  4. java - występy MongoDB + Solr

  5. MongodDB $wyciągnij tylko jeden element z tablicy