sql >> Base de Datos >  >> NoSQL >> MongoDB

Guardar en MongoDB en un bucle

Eso es porque save es en realidad una operación de E/S que es asíncrona. Ahora, el for el bucle en realidad está sincronizado. Piénselo de esta manera:su motor JS ejecuta en serie cada línea que ve. Suponga que estas líneas se guardan una tras otra en una pila. Cuando se trata de save , lo mantiene a un lado en una pila diferente (ya que es una operación de E/S y, por lo tanto, llevaría tiempo) y continúa con el resto del bucle. Resulta que el motor solo verificaría esta nueva pila después de haber completado cada línea en la anterior. Por tanto, el valor de la variable cats será el último elemento de la matriz. Por lo tanto, solo se guarda el último valor.

Para luchar contra esta tragedia, puede utilizar varios métodos:

  1. Cierres:Leer más
  2. Promesas:Leer más . Hay una dulce biblioteca que promete que el controlador mongo facilitará el trabajo.
  3. Generadores, etc. - Leer más . Todavía no está listo para el horario de máxima audiencia.

Nota sobre el n.º 2:no soy colaborador del proyecto, pero trabajo con el autor. ¡He estado usando la biblioteca durante más de un año y es rápida e increíble!