sql >> Database >  >> NoSQL >> MongoDB

Opslaan naar MongoDB in een lus

Dat komt omdat de save is eigenlijk een I/O-bewerking die Async is. Nu, de for loop is eigenlijk sync. Zie het op deze manier:je JS-engine voert serieel elke regel uit die hij ziet. Neem aan dat deze lijnen een voor een op een stapel worden bewaard. Als het gaat om het save , het houdt het apart op een andere stapel (omdat het een I/O-bewerking is en dus tijd zou vergen) en gaat verder met de rest van de lus. Het blijkt dus dat de engine deze nieuwe stapel pas zou controleren nadat elke regel op de oudere is voltooid. Daarom is de waarde van de variabele cats zal het laatste item in de array zijn. Zo wordt alleen de laatste waarde opgeslagen.

Om deze tragedie te bestrijden, kun je meerdere methoden gebruiken:

  1. Sluitingen - Meer lezen
  2. Beloften - Meer lezen . Er is een sweet-bibliotheek wat de mongo-chauffeur belooft om het gemakkelijker te maken om mee te werken.
  3. Generators, enz. - Meer lezen . Nog niet klaar voor primetime.

Opmerking over #2 - Ik lever geen bijdrage aan het project, maar werk wel samen met de auteur. Ik gebruik de bibliotheek nu al meer dan een jaar en het is snel en geweldig!



  1. Mongoose update of voeg veel documenten in

  2. Ingesloten documenten filteren in MongoDB

  3. MongoDB:Hoe willekeurige elementen retourneren zonder Linq? (MongoDB, C#)

  4. MongoDb TTL op genest document is mogelijk?