MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Quand fermer la connexion à la base de données MongoDB dans Nodejs

Voici une solution potentielle basée sur l'approche de comptage (je ne l'ai pas testée et il n'y a pas de détection d'erreur, mais cela devrait transmettre l'idée).

La stratégie de base est :acquérir le nombre d'enregistrements à mettre à jour, enregistrer chaque enregistrement de manière asynchrone et un rappel en cas de succès, ce qui décrémentera le nombre et fermera la base de données si le nombre atteint 0 (lorsque la dernière mise à jour se termine). En utilisant {safe:true} nous pouvons nous assurer que chaque mise à jour est réussie.

Le serveur mongo utilisera un thread par connexion, il est donc bon soit a) de fermer les connexions inutilisées, soit b) de les regrouper/réutiliser.

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