MongoDB aggregation: análisis y filtrado de bases de datos
MongoDB aggregation es una herramienta valiosa si quieres analizar o filtrar tus bases de datos. Este sistema de canalización permite especificar consultas y, por tanto, también salidas de forma personalizada.
¿Qué es la MongoDB aggregation?
MongoDB es una base de datos orientada a documentos no relacional diseñada para utilizar grandes cantidades de datos. Al prescindir de tablas rígidas y usar técnicas como la fragmentación, en la que los datos se almacenan en distintos nodos, esta solución NoSQL puede escalarse horizontalmente sin perder flexibilidad ni protección contra fallos. Los documentos en formato BSON (binary JSON) se agrupan en las denominadas colecciones y pueden consultarse y editarse mediante el lenguaje de consulta de MongoDB. Aunque este lenguaje ofrece muchas opciones, no es adecuado (o lo es de forma insuficiente) para analizar datos. Por ello existe la agregación MongoDB.
Este término se utiliza para describir diversos procesos en informática. En relación con MongoDB, agregación significa determinación de información resumida. Para ello, los datos de uno o varios documentos se analizan y filtran en función de determinados factores definidos. Al final de este proceso se obtiene un resultado único y claro. A continuación, no solo te explicaremos las posibilidades que te ofrece la agregación en MongoDB para el análisis exhaustivo de datos, sino que también te mostraremos cómo puedes utilizar el método aggregate ( )
para el sistema de gestión de bases de datos con un ejemplo.
MongoDB aggregation: preparativos y requisitos
Para utilizar la agregación de MongoDB solo se necesitan algunos requisitos previos. El método se ejecuta en el shell y sigue reglas lógicas que se pueden ajustar a tus requisitos individuales. Para esto, MongoDB ya debe estar instalado en tu ordenador. Te explicamos cómo descargar, instalar y ejecutar la base de datos por primera vez en nuestro extenso tutorial sobre MongoDB. Además, se recomienza utilizar un firewall potente y configurar tu base de datos de acuerdo con los estándares de seguridad comunes. Para realizar la agregación en MongoDB, necesitarás permisos de administrador. La base de datos es compatible con varias plataformas, por lo que los pasos descritos a continuación se aplican a todos los sistemas operativos por igual.
El papel del pipeline en la agregación de MongoDB
También tienes la opción de realizar búsquedas o consultas simples en MongoDB. La base de datos te devolverá inmediatamente los resultados deseados. Sin embargo, este método está muy limitado, ya que solo puede mostrar resultados que ya existen dentro de los documentos almacenados. Esta forma de consulta no está diseñada para un análisis más profundo, patrones recurrentes o información adicional. Sin embargo, a veces es necesario considerar diferentes fuentes dentro de una base de datos para poder sacar conclusiones significativas. Para tales requisitos, se utiliza la agregación de MongoDB. Para obtener un resultado, este método utiliza pipelines.
¿Cuál es la función del pipeline?
Los pipelines de agregación de MongoDB son procesos en los que los datos existentes se analizan y filtran mediante varios pasos intermedios para mostrar a los usuarios el resultado deseado. Estos pasos intermedios se conocen como etapas. Dependiendo de los requisitos, puede iniciarse una etapa o varias etapas. Estas se ejecutan una detrás de otra y modifican la entrada original de modo que al final se muestre el resultado buscado. Mientras que la entrada se compone de numerosos datos, la salida, es decir, el resultado final, es singular. A continuación, te explicamos las diferentes etapas que ofrece la agregación de MongoDB.
¿Qué sintaxis tienen los pipelines de agregación en MongoDB?
Primero, es recomendable echar un breve vistazo a la sintaxis básica de la agregación de MongoDB. El método siempre sigue el mismo esquema, aunque puede ser adaptado a tus requisitos específicos. La estructura básica es la siguiente:
db.collection_name.aggregate ( pipeline, options )
shellEn este caso, collecion_name
es el nombre de la colección considerada. En pipeline
, se enumeran las etapas necesarias o deseadas de la agregación de MongoDB, y options
puede ser utilizado para especificar otros parámetros opcionales que afecten la salida requerida.
¿Qué etapas existen?
Hay numerosas etapas en un pipeline de agregación en MongoDB. La mayoría de ellas pueden ser utilizadas varias veces dentro del mismo pipeline. Un listado completo es muy extenso, sobre todo porque algunas solo son necesarias para operaciones muy específicas. Sin embargo, puedes hacerte una idea con las etapas más utilizadas que aquí presentamos:
-
$count
: ofrece un recuento de cuántos documentos BSON fueron considerados para la etapa o etapas en este pipeline. -
$group
: ordena y agrupa los documentos según ciertos parámetros. -
$limit
: reduce los documentos mostrados. -
$match
: limita los documentos que se utilizarán para la siguiente etapa. -
$out
: los resultados de la agregación de MongoDB se incluyen en la colección. Este paso solo puede ser utilizado al final de un pipeline. -
$project
: selecciona campos específicos de una colección. -
$skip
: ignora una cantidad específica de documentos. Esto se establece mediante una opción. -
$sort
: ordena documentos según un método de tu elección. Sin embargo, los documentos no se modifican más allá. -
$unset
: excluye ciertos campos y, por lo tanto, funciona como el opuesto de $project.
MongoDB aggregation: ejemplos prácticos
Para entender mejor cómo funciona la agregación de MongoDB en la práctica, te mostramos algunos ejemplos de diferentes etapas y cómo utilizarlas. Si quieres utilizar la agregación de MongoDB, abre el shell como administrador. Normalmente, primero se mostrará una base de datos de prueba. Si deseas utilizar otra base de datos puedes usar el comando use
.
Para nuestro ejemplo, imagina una base de datos que contiene los datos de clientes que han comprado un producto específico. Por simplicidad, esta base de datos solo contendrá diez documentos, todos estructurados según el mismo esquema. Ejemplificaremos este esquema de la siguiente manera:
{
"name" : "Schmidt",
"city" : "Berlin",
"country" : "Germany",
"quantity" : 14
}
shellLa información que conocen todos los compradores es, por tanto, el nombre, el lugar de residencia, el país y el número de productos adquiridos.
Si quieres probar la agregación en MongoDB, utiliza el método insertMany ( )
para añadir todos los documentos con datos de clientes a la colección “clientes”.
db.clientes.insertMany ( [
{ "name" : "Schmidt", "city" : "Berlin", "country" : "Germany", "quantity" : 14 },
{ "name" : "Meyer", "city" : "Hamburg", "country" : "Germany", "quantity" : 26 },
{ "name" : "Lee", "city" : "Birmingham", "country" : "England", "quantity" : 5 },
{ "name" : "Rodriguez", "city" : "Madrid", "country" : "Spain", "quantity" : 19 },
{ "name" : "Nowak", "city" : "Krakow", "country" : "Poland", "quantity" : 13 },
{ "name" : "Rossi", "city" : "Milano", "country" : "Italy", "quantity" : 10 },
{ "name" : "Arslan", "city" : "Ankara", "country" : "Turkey", "quantity" : 18 },
{ "name" : "Martin", "city" : "Lyon", "country" : "France", "quantity" : 9 },
{ "name" : "Mancini", "city" : "Rome", "country" : "Italy", "quantity" : 21 },
{ "name" : "Schulz", "city" : "Munich", "country" : "Germany", "quantity" : 2 }
] )
shellSi creas esta entrada de esta forma, se mostrará una lista de distintos ID de objetos para cada documento individual.
Cómo usar $match
Para ilustrar las capacidades de la agregación de MongoDB, primero aplicaremos la etapa $match a nuestra colección “Clientes”. Sin ningún otro parámetro, esto simplemente nos devolvería la lista completa de los datos de clientes enumerados anteriormente. Sin embargo, en el siguiente ejemplo, instruimos al método para que nos muestre solo clientes de Italia. El comando correspondiente sería este:
db.clientes.aggregate ( [
{ $match : { "country" : "Italy" } }
] )
shellLa salida solo mostrará ahora los identificadores de objeto y los datos de los dos clientes italianos.
$sort para una mejor visión
Si quieres ordenar tu base de datos de clientes, puedes utilizar la agregación en MongoDB con la etapa $sort. En el siguiente ejemplo, indicamos al sistema que ordene todos los datos de los clientes según el número de unidades compradas, empezando por el número más alto. La entrada apropiada para nuestro ejemplo sería la siguiente:
db.clientes.aggregate ( [
{ $sort : { "quantity" : -1 } }
] )
shellLimita el resultado con $project
Con las etapas utilizadas hasta ahora, verás que el resultado es bastante extenso. Además de la información real dentro de los documentos, siempre se incluye el ID de objeto, por ejemplo. Con la ayuda de $project, puedes determinar qué información debe mostrarse en el pipeline de agregación de MongoDB. Para ello, establecemos el valor 1 para los campos necesarios y el valor 0 para los campos innecesarios. En nuestro ejemplo, solo queremos ver el nombre del cliente y la cantidad de productos comprados. Por lo tanto, ingresamos lo siguiente:
db.clientes.aggregate ( [
{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
] )
shellCombinar varias etapas para la agregación MongoDB
La agregación en MongoDB también ofrece siempre la opción de aplicar varias etapas sucesivamente. Estas se ejecutan una tras otra, y al final se obtiene un resultado que tiene en cuenta todos los parámetros deseados. Por ejemplo, si solo deseas mostrar los nombres y las compras de los clientes alemanes en orden descendente, utiliza las etapas escritas anteriormente de la siguiente manera:
db.clientes.aggregate ( [
{ $match : { "country" : "Germany" } }
{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
{ $sort : { "quantity" : -1 } }
] )
shell¿Quieres saber más sobre MongoDB? Encontrarás toda la información en nuestra Digital Guide. Te explicamos, por ejemplo, cómo funciona el comando List Databases y cómo utilizar MongoDB Sort para especificar el orden de salida de tus datos.