As duas instruções fazem basicamente a mesma coisa no nível da API principal, que é pegar o cursor e transformar os resultados. No entanto, há uma diferença "principal" sobre o desempenho:
-
.forEach()
irá transformar os resultados do cursor "um de cada vez" e processar a função iteradora fornecida.
-
.fetch()
por outro lado, obtém o "array" do cursor "tudo de uma vez", o que significa que está tudo "na memória" em um clique.
Portanto, não importa o que aconteça, nenhum dos dois é realmente "mais rápido" em fazer a operação "principal" de buscar do cursor da consulta. No entanto, não avaliar uma "expressão" em cada iteração do cursor "pode ser" um pouco mais rápido, então
.fetch()
pode ganhar um "pouco" aqui. O grande problema, é claro, é que "tudo está agora na memória", então há a "sobrecarga" de fazer isso a ser considerada. Além disso, no momento de
.fetch()
o _.each()
ainda está para ser processado, como diz o ditado. "O que você "ganha" nos balanços provavelmente "perde" nas rotatórias" . Sem um benchmarking completo de casos específicos, os "tempos" provavelmente serão semelhantes. E o benchmarking genérico é quase inútil, a menos que aplique especificamente o tamanho dos conjuntos de dados com os quais você está trabalhando.
O caso geral, portanto, sai, "Sobre o mesmo" , No entanto, usando
.fetch()
vai consumir mais memória do que apenas iterar um cursor desde o início.