Node.js mongodb pilote async/await requêtes
J'ai un node.js application à l'aide de mongodb pilote natif.
Dans le processus de la migration de mon code d'application async/await l'aide d'un noeud v8.9.1, j'ai du mal à trouver un moyen élégant pour mongodb requêtes.
Le problème majeur avec mongodb conducteur est, que toutes les requêtes sont à l'aide de rappels lorsque des promesses fonctions sont obligatoires pour les méthodes asynchrones.
Alternatives:
- mangouste- les promesses des requêtes obsolète et il les forces à l'aide de modèle de Schéma qui est un peu de surcharge pour mon application.
- mongoist- soi-disant grand, parce qu'il construit avec async/await dans l'esprit et entièrement promesse, mais des erreurs avec connexion SSL pour mongodb et les pauvres de la documentation - qui m'a attiré à l'écart de cette solution.
La seule solution que j'ai réussi à mettre en œuvre dans une élégante façon est d'utiliser de rappel-la promesse mnp paquet de convertir mongodb pilote API entièrement promesse.
Frais d'idées pour un élégant, de haute performance?
Est semble avoir besoin d'un ‘co’ paquet. Je suis fondamentalement à la recherche d'un promesse bibliothèque native
OriginalL'auteur Ido Lev | 2017-11-18
Vous devez vous connecter pour publier un commentaire.
C'est le plus petit morceau de code que j'ai trouvé qui est compatible avec Mongo3 et async/await.
Profitez-en!
Probablement oui, j'ai trouvé d'autres réponses pas assez concis
OriginalL'auteur Sovattha Sok
Edit: 'mongodb' v3.x
selon mongoDB ES6 avenir
vous pouvez utiliser ce moyen;
Depuis la Version 3, MongoClient retourne un client, pas un db objet!
Cela ne fonctionne pas plus. Pouvons-nous obtenir une mise à jour pour les versions récentes de mongodb, s'il vous plaît?
OriginalL'auteur Serhat Ates
Grâce. Génial de travailler avec ES6:
require('middleware')
étape, voici un excellent guide: medium.com/@Abazhenov/...Cela ne fonctionne pas plus non plus. Toute chance d'une mise à jour?
J'ai négligé mongodb et à l'aide de la mangouste maintenant. Il est fortement recommandé car beaucoup de mises à jour et des promesses de soutien.
OriginalL'auteur Ido Lev
Si u ne passe pas un rappel, mongodb client renvoie une promesse.
De l'officiel
docs
OriginalL'auteur Surya
Je poste cela comme une réponse parce que je ne peux pas commenter sur Ido Lev de la réponse. Je vais déplacer ce dès que j'aurai atteint 50 points de réputation.
N'oubliez pas de fermer la connexion db. Sinon, il est possible que votre demande ne peut pas se connecter à la db en raison du trop grand nombre de connexions ouvertes (qui m'est arrivé il y a une semaine).
Votre requête peut réussir ou échouer, il est donc logique de fermer la connexion à un
finally
-bloc.Mise à jour: Il semble que cela n'a pas de résoudre mon problème. Certaines personnes disent que vous n'avez même pas besoin de fermer la connexion manuellement. Il me semble qu'il est préférable de réutiliser votre connexion à travers vous demande si possible.
OriginalL'auteur 0xC0DEBA5E
ne pas Utiliser
mongoose.connect
en cas de async/awaitOriginalL'auteur muthukumar
Si vous voulez travailler avec le curseur, sans déchargement de Tableau, vous ne pouvez pas utiliser attendent avec find() ou global (de) fonctions, alors vous devez utiliser le code:
UPD par la Cua:
Pour le cas général, les réponses à l'aide de toArray() sont suffisantes.
Mais lorsque d'énormes collections de documents sont concernés, à l'aide de toArray() dépassent la quantité de RAM disponible. Ainsi, une "haute performance" de la solution dans ces situations ne doivent pas utiliser toArray().
Pour ces cas, vous pouvez utiliser MongoDB ruisseaux, qui fonctionne bien, mais même plus simple que d'utiliser les cours d'eau est de:
OriginalL'auteur Pax Beach
(Basé sur le Pax de la Plage de réponse. Il avait été downvoted, et je voulais ajouter un commentaire expliquant pourquoi, dans certaines situations, Pat la réponse est la meilleure. Je n'ai pas assez de rep pour ajouter des commentaires.)
Pour le cas général, les réponses à l'aide de toArray() sont suffisantes.
Mais quand énorme collections de documents sont concernés, à l'aide de toArray() dépassent la quantité de RAM disponible. Ainsi, une "haute performance" de la solution dans ces situations ne doivent pas utiliser toArray().
Pour ces cas, vous pouvez utiliser MongoDB ruisseaux, qui fonctionne bien, mais même plus simple que d'utiliser les cours d'eau est de:
OriginalL'auteur Usas