MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Salvataggio in MongoDB in un ciclo

Questo perché save è in realtà un'operazione di I/O che è Async. Ora, il for loop è in realtà sincronizzato. Pensaci in questo modo:il tuo motore JS esegue in serie ogni riga che vede. Supponiamo che queste righe siano mantenute una dopo l'altra su una pila. Quando si tratta di save , lo tiene da parte su uno stack diverso (poiché è un'operazione di I/O e quindi richiederebbe tempo) e prosegue con il resto del ciclo. Si scopre così che il motore verificherebbe questo nuovo stack solo dopo aver completato ogni riga su quello più vecchio. Pertanto, il valore della variabile cats sarà l'ultimo elemento nell'array. Pertanto, viene salvato solo l'ultimo valore.

Per combattere questa tragedia, puoi usare più metodi:

  1. Chiusure - Ulteriori informazioni
  2. Promesse - Leggi di più . Esiste una libreria di dolci che promette al driver mongo di semplificare il lavoro.
  3. Generatori, ecc. - Ulteriori informazioni . Non ancora pronto per la prima serata.

Nota su #2 - Non sono un collaboratore del progetto, ma lavoro con l'autore. Uso la libreria da oltre un anno ed è veloce e fantastica!