Cómo manejar el procesamiento de datos avanzado con el marco de agregación de MongoDB

MongoDB ha recorrido un largo camino. Aunque hay muchas bases de datos NoSQL, MongoDB es la primera base de datos que me viene a la mente cuando se habla de bases de datos NoSQL.

Aunque siempre ha habido un poco de tensión entre las personas a las que les gusta SQL y las personas que prefieren NoSQL, la verdad es que las bases de datos como MongoDB resuelven un problema diferente.

Y pueden ser realmente útiles cuando se manejan datos no estructurados donde manipular la forma de los datos de manera rápida y eficiente (y convertirlos en conocimiento relevante) es más útil que el rendimiento sólido que proporcionan las bases de datos SQL de la vieja escuela.

MongoDB viene con un poderoso marco para hacer esto, es decir, manipular datos directamente en el servidor: Aggregation Framework. Entremos en él y cubramos algunos puntos rápidos al respecto, qué es y por qué es importante.

¿Qué es el Marco de agregación?

El marco de agregación es solo una forma de consultar documentos en una colección en MongoDB. Este marco existe porque cuando comienza a trabajar con datos y a manipularlos, a menudo necesita agrupar colecciones, modificarlas, eliminar campos, renombrar campos, agruparlos, agrupar documentos por campo, expandir la matriz de campos en diferentes documentos, etc. .

Esto no se puede hacer con el sistema de consulta tradicional con el que viene MongoDB (es decir, la consulta de búsqueda o actualización, o cualquier otra consulta que haya utilizado).

La consulta simple establecida en MongoDB solo le permite recuperar documentos individuales completos o partes de ellos. Realmente no le permiten manipular los documentos en el servidor y luego devolverlos a su aplicación.

Aquí es donde entra en juego el marco de agregación de MongoDB. No es nada externo, ya que la agregación se incorpora a MongoDB. Puede aprender a trabajar con el marco de agregación de MongoDB utilizando esta lista de reproducción gratuita de YouTube que hice.

Tubería

El marco de agregación se basa en el concepto de canalización. Veamos una imagen que lo explica mejor:

Aquí, como puede ver, recogemos una colección y la pasamos a través de una tubería. Esta canalización consta de ciertas etapas en las que ciertos operadores modifican los documentos de la colección utilizando diversas técnicas. Finalmente, la salida se devuelve a la aplicación que llama a la consulta.

Compárelo con una consulta simple, como buscar. Seguro, funciona en la mayoría de las formas, pero no es realmente útil cuando desea modificar los datos mientras los recupera.

O deberá buscar los documentos y modificarlos en consecuencia en la aplicación en el servidor, o peor aún, los enviará al cliente y dejará que el código de la interfaz lo modifique por usted.

En ambos casos, está desperdiciando recursos y ancho de banda. Por tanto, el marco de agregación aborda este problema de forma clara. Veamos cómo lo hace con los operadores.

Operadores de oleoductos

En MongoDB, la canalización es una matriz que consta de varios operadores, que toman un montón de documentos y escupen documentos modificados de acuerdo con las reglas especificadas por el programador. El siguiente operador toma los documentos escupidos por el operador anterior, por lo tanto, se llama canalización.

Puede tener muchos operadores en una canalización y estos operadores también se pueden repetir, a diferencia de las consultas regulares de MongoDB.

Echemos un vistazo a algunos operadores de canalización comunes en MongoDB.

$ grupo

Este operador le permite agrupar un montón de documentos sobre la base de un determinado campo en los documentos. También se puede utilizar para agrupar los distintos campos de los documentos.

Soy un gran creyente en el dicho de que una imagen vale más que 1000 palabras. Un video vale 1000 imágenes (bueno, técnicamente muchas más imágenes, pero está bien), así que veamos un video rápido sobre eso:

$ partido

El operador de canalización de coincidencias funciona de manera muy similar a cómo funciona el operador de búsqueda normal. Sin embargo, lo bueno de esto es que se puede usar varias veces porque se encuentra en un entorno de canalización. Esto lo hace poderoso.

Veamos cómo se usa en una colección:

$ límite

El operador de canalización $ skip omite los primeros N documentos y pasa el resto de los documentos al siguiente operador. Veamos un ejemplo rápido:

$ omitir

El operador de canalización $ skip omite los primeros N documentos y pasa el resto de los documentos al siguiente operador. Veamos un ejemplo rápido:

$ relajarse

Este operador es personalmente mi favorito. $ desenrollar toma un campo de matriz y lo descompone en múltiples N subdocumentos con el i-ésimo documento que contiene el i-ésimo valor particular de matriz como el valor del nombre del campo.

Combinado con otros operadores como $ group y $ match, esto se vuelve muy poderoso para el procesamiento de datos. ¿Suena confuso? Veamos un ejemplo simple:

$ proyecto

El operador del proyecto le permite extraer un montón de campos de cada documento y descartar el resto. No solo eso, sino que también puede cambiar el nombre de los campos pinchados, cadenas concat, eliminar subcadenas y mucho más.

Veamos cómo funciona esto en pocas palabras:

Mejores prácticas para usar el marco de agregación

Con un gran poder viene una gran responsabilidad. También puede aprovechar fácilmente el marco de agregación para realizar consultas simples, por lo que es importante asegurarse de no escribir consultas de base de datos deficientes.

Para empezar, tenga en cuenta los siguientes puntos:

  1. MongoDB rechazará cualquier operador que ocupe más de 100 MB de RAM y generará un error. Por lo tanto, asegúrese de recortar sus datos lo antes posible, ya que un solo operador no debería ocupar más de 100 MB de memoria.
  2. ¡El orden importa! Poner $ match primero reducirá la cantidad de documentos que se pasan al resto del pipeline. Poner $ project a continuación reducirá aún más el tamaño de un documento individual al eliminar los campos.
  3. Finalmente, asegúrese de hacer todo el trabajo que requiere el uso de campos indexados (ordenar, emparejar, etc.) antes de usar operadores como $ project o $ unsind. Esto se debe a que estos operadores crean nuevos documentos que no tienen los índices del documento original.

Conclusión

MongoDB es una excelente herramienta de base de datos y puede ser realmente útil para pequeñas empresas y empresas que desean iterar rápidamente. Esto se debe en parte a sus restricciones flexibles y su naturaleza indulgente.

Yo mismo estoy usando MongoDB en codedamn, ¡una plataforma para desarrolladores como tú donde todos aprenden y se conectan!

¡Paz!