sql >> Databáze >  >> NoSQL >> MongoDB

Ukládání do MongoDB ve smyčce

To proto, že save je ve skutečnosti I/O operace, která je asynchronní. Nyní for smyčka je ve skutečnosti synchronizace. Přemýšlejte o tom takto:váš modul JS sériově provádí každý řádek, který vidí. Předpokládejme, že tyto řádky jsou uloženy jedna po druhé na zásobníku. Když dojde na save , uchovává jej stranou v jiném zásobníku (protože jde o I/O operaci, a proto by to zabralo čas) a pokračuje se zbytkem smyčky. Ukázalo se tedy, že engine zkontroluje tento nový zásobník až poté, co dokončí každý řádek na starším. Tedy hodnota proměnné cats bude poslední položkou v poli. Uloží se tedy pouze poslední hodnota.

K boji s touto tragédií můžete použít několik metod:

  1. Uzávěry – Přečtěte si více
  2. Promises – Přečtěte si více . Existuje sladká knihovna což řidiči mongo slibuje, že se s ním bude snadněji pracovat.
  3. Generátory atd. – Přečtěte si více . Zatím není připraveno na hlavní vysílací čas.

Poznámka k #2 - Nejsem přispěvatelem projektu, ale spolupracuji s autorem. Knihovnu používám již více než rok a je rychlá a úžasná!



  1. chyba spring-mongo-1.0.xsd

  2. MongoError:Nejsou ověřeni žádní uživatelé

  3. MongoDB agregované pole v poli objektů

  4. Json.NET deserializující Mongo ObjectId dává nesprávný výsledek