MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Quando chiudere la connessione al database MongoDB in Nodejs

Ecco una potenziale soluzione basata sull'approccio di conteggio (non l'ho testato e non c'è traccia degli errori, ma dovrebbe trasmettere l'idea).

La strategia di base è:acquisire il conteggio di quanti record devono essere aggiornati, salvare ogni record in modo asincrono e un callback in caso di esito positivo, che diminuirà il conteggio e chiuderà il DB se il conteggio arriva a 0 (al termine dell'ultimo aggiornamento). Utilizzando {safe:true} possiamo garantire che ogni aggiornamento abbia successo.

Il server mongo utilizzerà un thread per connessione, quindi è bene a) chiudere le connessioni inutilizzate o b) raggrupparle/riutilizzarle.

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