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

MongoDB znajduje zakres dat, jeśli pokrywają się z innymi datami

Nakładanie się czasu można zilustrować w tych 4 przypadkach na poniższym rysunku, gdzie S/E to data początkowa/końcowa nowego dokumentu, a S'/E' to data początkowa/końcowa dowolnego istniejącego dokumentu:

  S'                  E' 
  |-------------------|

   S                E 
   |****************|

S'          E' 
|-----------|

      S'          E' 
      |-----------|

              S'          E' 
              |-----------|

W 4 przypadkach mamy S'<E i E'>S . Zapytanie o znalezienie wszystkich dokumentów z nakładającym się czasem może być:

db.collection.find({"startdate": {"$lt": E}, "enddate": {"$gt": S}})

EDYCJA:

Data rozpoczęcia i data zakończenia są w formacie ciągu i nie są uporządkowane leksykalnie, dlatego nie można użyć do porównania wartości „$gt” i „$lt”. Należy je przekonwertować na typ daty:

db.collection.find().forEach(
  function (e) {
    // convert date if it is a string
    if (typeof e.startdate === 'string') {
       e.startdate = new Date(e.startdate);
    }
    if (typeof e.enddate === 'string') {
       e.enddate = new Date(e.enddate);
    } 
    // save the updated document
    db.collection.save(e);
  }
)

Ostatnie zapytanie to:

db.collection.find({"startdate": {"$lt": new Date("E")}, "enddate": {"$gt": new Date("S")}})



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Porównanie dwóch pól kolekcji mongo za pomocą sterownika c# w mono

  2. Czy powinienem przechowywać tokeny JWT w redis?

  3. Aplikacja podobna do Twittera korzystająca z MongoDB

  4. Obsługa wysyłania dwóch parametrów w wywołaniu API w aplikacji Angular

  5. MongoDb usuwa poddokument z dokumentu