MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wann soll die MongoDB-Datenbankverbindung in Nodejs geschlossen werden?

Hier ist eine mögliche Lösung, die auf dem Zählansatz basiert (ich habe es nicht getestet und es gibt kein Fehler-Trapping, aber es sollte die Idee vermitteln).

Die grundlegende Strategie lautet:Erfassen Sie die Anzahl der zu aktualisierenden Datensätze, speichern Sie jeden Datensatz asynchron und bei Erfolg einen Rückruf, der die Anzahl verringert und die DB schließt, wenn die Anzahl 0 erreicht (wenn die letzte Aktualisierung abgeschlossen ist). Durch die Verwendung von {safe:true} wir können sicherstellen, dass jedes Update erfolgreich ist.

Der Mongo-Server verwendet einen Thread pro Verbindung, daher ist es gut, entweder a) unbenutzte Verbindungen zu schließen oder b) sie zusammenzulegen/wiederzuverwenden.

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