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

MongoDB:forEach vs buscar + cada uno

Las dos declaraciones hacen básicamente lo mismo en el nivel principal de la API, que es obtener el cursor y transformar los resultados. Sin embargo, hay una diferencia "básica" sobre el rendimiento:

  • .forEach() transformará los resultados del cursor "uno a la vez" y procesará la función iteradora que se proporciona.

  • .fetch() por otro lado, obtiene la "matriz" del cursor "todo a la vez", lo que significa que está todo "en la memoria" de un solo golpe.

Entonces, pase lo que pase, ninguno de los dos es realmente "más rápido" para realizar la operación "básica" de obtener desde el cursor de la consulta. Sin embargo, no evaluar una "expresión" en cada iteración del cursor "puede ser" un poco más rápido, por lo que .fetch() podría ganar un "poco" aquí.

El gran gran problema, por supuesto, es que "todo está ahora en la memoria", por lo que hay que considerar la "sobrecarga" de hacer eso. Además, en el momento de .fetch() el _.each() aún no se ha procesado, como dice el refrán. "Lo que se 'gana' en los columpios probablemente se 'pierde' en las rotondas" .

Sin una evaluación comparativa completa de casos específicos, es probable que los "tiempos" sean similares. Y la evaluación comparativa genérica es casi inútil a menos que se aplique específicamente al tamaño de los conjuntos de datos con los que está trabajando.

Por lo tanto, surge el caso general, "Sobre lo mismo" , Sin embargo, usando .fetch() va a consumir más memoria que simplemente iterar un cursor desde el principio.