MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Salvando no MongoDB em um loop


Isso porque o save é na verdade uma operação de E/S que é assíncrona. Agora, o for loop é na verdade sync. Pense desta forma:seu mecanismo JS executa serialmente cada linha que vê. Suponha que essas linhas sejam mantidas uma após a outra em uma pilha. Quando se trata de save , ele o mantém de lado em uma pilha diferente (já que é uma operação de E/S e, portanto, levaria tempo) e segue em frente com o restante do loop. Acontece que o mecanismo só verificaria essa nova pilha depois de concluir todas as linhas da antiga. Portanto, o valor da variável cats será o último item do array. Assim, apenas o último valor é salvo.

Para combater esta tragédia, você pode usar vários métodos:
  1. Fechamentos - Leia mais
  2. Promessas - Leia mais . Existe uma sweet library que promete o driver mongo para facilitar o trabalho.
  3. Geradores etc. - Leia mais . Ainda não está pronto para o horário nobre.

Observação sobre o nº 2 - não sou um contribuidor do projeto, mas trabalho com o autor. Estou usando a biblioteca há mais de um ano e é rápido e incrível!