Dans de nombreux exemples d'introduction à l'utilisation de MongoDB, vous voyez un code comme celui-ci :
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect("mongodb://localhost:port/adatabase", function(err, db)
{
/* Some operation... CRUD, etc. */
db.close();
});
Si MongoDB est comme n'importe quel autre système de base de données, open
et close
sont généralement coûteuses en termes de temps.
Ma question est donc la suivante : Est-il possible de faire simplement le MongoClient.connect("...
une fois, assigner le db
à une valeur globale du module, faire en sorte que diverses fonctions du module effectuent divers travaux liés à la base de données (insertion de documents dans des collections, mise à jour de documents, etc. etc.) lorsqu'elles sont appelées par d'autres parties de l'application (et réutiliser ainsi cette valeur db
), puis, lorsque l'application est terminée, ce n'est qu'à ce moment-là que l'on peut utiliser la fonction close
.
En d'autres termes, open
et close
ne sont effectuées qu'une seule fois, et non à chaque fois que vous devez effectuer une opération liée à la base de données. Et vous continuez à réutiliser cette db
qui a été renvoyé lors de l'opération initiale de open\connect
pour s'en débarrasser à la fin, avec l'aide de la close
lorsque vous avez terminé votre travail sur la base de données.
Évidemment, puisque toutes les E/S sont asynchrones, avant que la fonction close
vous devez vous assurer que la dernière opération sur la base de données s'est terminée avant de lancer la commande close
. Il semble que cela devrait être correct, mais je voulais vérifier au cas où quelque chose m'échapperait, car je suis novice en matière de MongoDB. Merci de votre compréhension.