/ / Quand node-mongodb-native atteint-il la base de données? - mongodb, node-mongodb-natif

Quand node-mongodb-native touche-t-il la base de données? - mongodb, node-mongodb-native

J'ai du mal à comprendre quand exactement la base de données est atteinte lors de l'utilisation node-mongodb-native. Je n'ai pas pu trouver de référence à ce sujet. Comme tout est basé sur le rappel, cela m'a donné le sentiment que chaque appel atteint la base de données ... Par exemple, ces deux extraits sont-ils différents en termes de nombre de fois où la base de données est touchée:

// ---- 1
db.collection("bla", function(err, coll) {
coll.findOne({"blo": "bli"}, function(err, doc) {
coll.count(function(err, count) {
console.log(doc, count)
})
})
})

// ---- 2
db.collection("bla", function(err, coll) {
coll.findOne({"blo": "bli"}, function(err, doc) {
db.collection("bla", function(err, coll) {
coll.count(function(err, count) {
console.log(doc, count)
})
})
})
})

Je me demandais essentiellement si je pouvais mettre en cacheinstances de collections et curseurs. Par exemple, pourquoi ne pas récupérer les collections dont j'ai besoin une seule fois, au démarrage du serveur, et réutiliser les mêmes instances indéfiniment?

J'aimerais vraiment comprendre comment tout cela fonctionne, alors j'apprécierais vraiment un bon lien expliquant les choses en détail.

Réponses:

1 pour la réponse № 1

En regardant le code source du pilote node.js pour collection il semble qu'il ne lancera pas de ping à MongoDB lors de la création de la collection, sauf si vous avez activé le mode strict: https://github.com/mongodb/node-mongodb-native/blob/master/Readme.md#strict-mode

Le code source que j'ai regardé ( https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/db.js#L446 ) a renforcé l'idée que si strict n'était pas activé, il essaierait simplement de créer un nouvel objet de collection node.js et d'exécuter le rappel.

toutefois findOne et count interrompra l'interrogation "paresseuse" de node.js et le forcera à interroger la base de données afin d'obtenir des résultats.

Noter la count être sur la collection n'impose pas un "vrai" décompte de tous les éléments de la collection. Au lieu de cela, il garnira ces informations de la méta de la collection.

Donc, pour le premier extrait, vous devriez voir deux requêtes s'exécuter. Un pour le findOne et un pour le count et deux pour le deuxième extrait de code depuis la création de la collection après le findOne ne doit pas appliquer une requête à MongoDB.


1 pour la réponse № 2

Après quelques recherches sur Google, j'ai trouvé ce lien sur les meilleures pratiques pour node-mongodb-native. Il est répondu par Christian Kvalheim qui semble être le responsable de la bibliothèque. Il dit :

"Vous pouvez stocker en toute sécurité les objets de la collection si vous le souhaitez et les réutiliser"

Donc même si l'appel à collection pourrait frapper la base de données au cas où il est fait dans strict mode, l'instance de collecte côté client réelle peut être réutilisée.