MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB намира диапазон от дати, ако се припокрива с други дати

Припокриването във времето може да бъде илюстрирано с тези 4 случая на фигурата по-долу, където S/E е начална/крайна дата на новия документ, а S'/E' е начална/крайна дата на всеки съществуващ документ:

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

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

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

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

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

В 4 случая имаме S'<E и E'>S . Заявката за намиране на всички документи с припокрито време може да бъде:

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

РЕДАКТИРАНЕ:

Вашата начална и крайна дата са във формат на низ и не са подредени лексикално, следователно не можете да използвате "$gt" и "$lt" за сравнение. Трябва да ги конвертирате в Тип дата:

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

Последната заявка ще бъде:

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. Как да $търся чрез избягване на нулеви стойности в агрегата на mongodb

  2. Намерете името на колекцията от document._id в meteor (mongodb)

  3. командата mongorestore заменя съществуващите записи?

  4. Mongoose презаписва документа, а не `$set` полета

  5. Как мога да напиша агрегиране, без да надвишава максималния размер на документа?