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

Enregistrement dans MongoDB en boucle

C'est parce que le save est en fait une opération d'E/S qui est asynchrone. Maintenant, le for La boucle est en fait synchronisée. Pensez-y de cette façon :votre moteur JS exécute en série chaque ligne qu'il voit. Supposons que ces lignes soient conservées les unes après les autres sur une pile. En ce qui concerne la save , il le garde de côté sur une pile différente (car il s'agit d'une opération d'E/S, et prendrait donc du temps) et continue avec le reste de la boucle. Il s'avère donc que le moteur ne vérifierait cette nouvelle pile qu'après avoir terminé chaque ligne de l'ancienne. Par conséquent, la valeur de la variable cats sera le dernier élément du tableau. Ainsi, seule la dernière valeur est enregistrée.

Pour lutter contre cette tragédie, vous pouvez utiliser plusieurs méthodes :

  1. Fermetures - En savoir plus
  2. Promesses - En savoir plus . Il existe une sweet library qui promet le pilote mongo pour faciliter le travail avec.
  3. Générateurs, etc. - En savoir plus . Pas encore prêt pour les heures de grande écoute.

Remarque sur #2 - Je ne suis pas un contributeur du projet, mais je travaille avec l'auteur. J'utilise la bibliothèque depuis plus d'un an maintenant, et c'est rapide et génial !