MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Speichern in MongoDB in einer Schleife

Das liegt daran, dass save ist eigentlich eine E/A-Operation, die Async ist. Jetzt der for Schleife ist eigentlich sync. Stellen Sie sich das so vor:Ihre JS-Engine führt jede Zeile, die sie sieht, seriell aus. Angenommen, diese Zeilen werden nacheinander auf einem Stapel gehalten. Wenn es um das save geht , es behält es auf einem anderen Stapel beiseite (da es sich um eine E / A-Operation handelt und daher einige Zeit dauern würde) und fährt mit dem Rest der Schleife fort. Es stellt sich also heraus, dass die Engine diesen neuen Stack erst überprüfen würde, nachdem sie alle Zeilen auf dem älteren abgeschlossen hat. Daher ist der Wert der Variable cats wird das letzte Element im Array sein. Somit wird nur der letzte Wert gespeichert.

Um diese Tragödie zu bekämpfen, können Sie mehrere Methoden anwenden:

  1. Schließungen – Weitere Informationen
  2. Versprechungen – Weitere Informationen . Es gibt eine süße Bibliothek was dem Mongo-Treiber verspricht, die Arbeit zu erleichtern.
  3. Generatoren usw. – Lesen Sie mehr . Noch nicht bereit für die Primetime.

Anmerkung zu Nr. 2 - Ich bin kein Mitwirkender des Projekts, arbeite aber mit dem Autor zusammen. Ich benutze die Bibliothek jetzt seit über einem Jahr und sie ist schnell und großartig!