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

Kiedy zamknąć połączenie z bazą danych MongoDB w Nodejs

Oto potencjalne rozwiązanie oparte na podejściu liczenia (nie testowałem go i nie ma błędów wyłapywania, ale powinno to przekazać ideę).

Podstawowa strategia to:Pozyskaj liczbę rekordów do zaktualizowania, zapisz każdy rekord asynchronicznie i wywołanie zwrotne w przypadku powodzenia, które zmniejszy liczbę i zamknie bazę danych, jeśli liczba osiągnie 0 (po zakończeniu ostatniej aktualizacji). Używając {safe:true} możemy zapewnić, że każda aktualizacja zakończy się sukcesem.

Serwer mongo będzie używał jednego wątku na połączenie, więc dobrze jest albo a) zamknąć nieużywane połączenia, albo b) połączyć je/ponownie wykorzystać.

db.open(function (err, db) {
  db.collection('foo', function (err, collection) {
    var cursor = collection.find({});
    cursor.count(function(err,count)){
      var savesPending = count;

      if(count == 0){
        db.close();
        return;
      }

      var saveFinished = function(){
        savesPending--;
        if(savesPending == 0){
          db.close();
        }
      }

      cursor.each(function (err, doc) {
        if (doc != null) {
          doc.newkey = 'foo'; // Make some changes
          db.save(doc, {safe:true}, saveFinished);
        }
      });
    })
  });
});


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. kopia mongo z jednej kolekcji do drugiej (na tej samej bazie danych)

  2. Dlaczego PyMongo 3 daje ServerSelectionTimeoutError?

  3. Mongoose - Jak grupować i wypełniać?

  4. Jak zaktualizować/ulepszyć dokument w Mongoose?

  5. Czy Mongoose zapewnia dostęp do poprzedniej wartości właściwości w pre('save')?