Travailler avec Nodejs et MongoDB grâce au pilote natif de Node MongoDB. J'ai besoin de récupérer des documents, de les modifier, puis de les sauvegarder. Voici un exemple :
db.open(function (err, db) {
db.collection('foo', function (err, collection) {
var cursor = collection.find({});
cursor.each(function (err, doc) {
if (doc != null) {
doc.newkey = 'foo'; // Make some changes
db.save(doc); // Update the document
} else {
db.close(); // Closing the connection
}
});
});
});
Avec la nature asynchrone, si le processus de mise à jour du document prend plus de temps, alors lorsque le curseur atteint la fin des documents, la connexion à la base de données est fermée. Toutes les mises à jour ne sont pas enregistrées dans la base de données.
Si le db.close()
est omis, tous les documents sont correctement mis à jour, mais l'application se bloque, sans jamais sortir.
J'ai vu un post suggérant d'utiliser un compteur pour suivre le nombre de mises à jour, quand il retombe à zéro, alors fermez le db. Mais est-ce que je fais quelque chose de mal ici ? Quelle est la meilleure façon de gérer ce genre de situation ? Est-ce que db.close()
doivent être utilisées pour libérer des ressources ? Ou bien une nouvelle connexion à la base de données doit-elle être ouverte ?