MongoDB ag­gre­ga­tion es una he­rra­mie­n­ta valiosa si quieres analizar o filtrar tus bases de datos. Este sistema de ca­na­li­za­ción permite es­pe­ci­fi­car consultas y, por tanto, también salidas de forma pe­r­so­na­li­za­da.

¿Qué es la MongoDB ag­gre­ga­tion?

MongoDB es una base de datos orientada a do­cu­me­n­tos no re­la­cio­nal diseñada para utilizar grandes ca­n­ti­da­des de datos. Al pre­s­ci­n­dir de tablas rígidas y usar técnicas como la fra­g­me­n­ta­ción, en la que los datos se almacenan en distintos nodos, esta solución NoSQL puede escalarse ho­ri­zo­n­ta­l­me­n­te sin perder fle­xi­bi­li­dad ni pro­te­c­ción contra fallos. Los do­cu­me­n­tos en formato BSON (binary JSON) se agrupan en las de­no­mi­na­das co­le­c­cio­nes y pueden co­n­su­l­tar­se y editarse mediante el lenguaje de consulta de MongoDB. Aunque este lenguaje ofrece muchas opciones, no es adecuado (o lo es de forma in­su­fi­cie­n­te) para analizar datos. Por ello existe la agre­ga­ción MongoDB.

Este término se utiliza para describir diversos procesos en in­fo­r­má­ti­ca. En relación con MongoDB, agre­ga­ción significa de­te­r­mi­na­ción de in­fo­r­ma­ción resumida. Para ello, los datos de uno o varios do­cu­me­n­tos se analizan y filtran en función de de­te­r­mi­na­dos factores definidos. Al final de este proceso se obtiene un resultado único y claro. A co­n­ti­nua­ción, no solo te ex­pli­ca­re­mos las po­si­bi­li­da­des que te ofrece la agre­ga­ción en MongoDB para el análisis exhau­s­ti­vo de datos, sino que también te mo­s­tra­re­mos cómo puedes utilizar el método aggregate ( ) para el sistema de gestión de bases de datos con un ejemplo.

MongoDB ag­gre­ga­tion: pre­pa­ra­ti­vos y re­qui­si­tos

Para utilizar la agre­ga­ción de MongoDB solo se necesitan algunos re­qui­si­tos previos. El método se ejecuta en el shell y sigue reglas lógicas que se pueden ajustar a tus re­qui­si­tos in­di­vi­dua­les. Para esto, MongoDB ya debe estar instalado en tu ordenador. Te ex­pli­ca­mos cómo descargar, instalar y ejecutar la base de datos por primera vez en nuestro extenso tutorial sobre MongoDB. Además, se re­co­mie­n­za utilizar un firewall potente y co­n­fi­gu­rar tu base de datos de acuerdo con los es­tá­n­da­res de seguridad comunes. Para realizar la agre­ga­ción en MongoDB, ne­ce­si­ta­rás permisos de ad­mi­ni­s­tra­dor. La base de datos es co­m­pa­ti­ble con varias pla­ta­fo­r­mas, por lo que los pasos descritos a co­n­ti­nua­ción se aplican a todos los sistemas ope­ra­ti­vos por igual.

El papel del pipeline en la agre­ga­ción de MongoDB

También tienes la opción de realizar búsquedas o consultas simples en MongoDB. La base de datos te devolverá in­me­dia­ta­me­n­te los re­su­l­ta­dos deseados. Sin embargo, este método está muy limitado, ya que solo puede mostrar re­su­l­ta­dos que ya existen dentro de los do­cu­me­n­tos al­ma­ce­na­dos. Esta forma de consulta no está diseñada para un análisis más profundo, patrones re­cu­rre­n­tes o in­fo­r­ma­ción adicional. Sin embargo, a veces es necesario co­n­si­de­rar di­fe­re­n­tes fuentes dentro de una base de datos para poder sacar co­n­clu­sio­nes si­g­ni­fi­ca­ti­vas. Para tales re­qui­si­tos, se utiliza la agre­ga­ción de MongoDB. Para obtener un resultado, este método utiliza pipelines.

¿Cuál es la función del pipeline?

Los pipelines de agre­ga­ción de MongoDB son procesos en los que los datos exi­s­te­n­tes se analizan y filtran mediante varios pasos in­te­r­me­dios para mostrar a los usuarios el resultado deseado. Estos pasos in­te­r­me­dios se conocen como etapas. De­pe­n­die­n­do de los re­qui­si­tos, 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 co­n­ti­nua­ción, te ex­pli­ca­mos las di­fe­re­n­tes etapas que ofrece la agre­ga­ción de MongoDB.

¿Qué sintaxis tienen los pipelines de agre­ga­ción en MongoDB?

Primero, es re­co­me­n­da­ble echar un breve vistazo a la sintaxis básica de la agre­ga­ción de MongoDB. El método siempre sigue el mismo esquema, aunque puede ser adaptado a tus re­qui­si­tos es­pe­cí­fi­cos. La es­tru­c­tu­ra básica es la siguiente:

db.collection_name.aggregate ( pipeline, options )
shell

En este caso, collecion_name es el nombre de la colección co­n­si­de­ra­da. En pipeline, se enumeran las etapas ne­ce­sa­rias o deseadas de la agre­ga­ción de MongoDB, y options puede ser utilizado para es­pe­ci­fi­car otros pa­rá­me­tros op­cio­na­les que afecten la salida requerida.

¿Qué etapas existen?

Hay numerosas etapas en un pipeline de agre­ga­ción en MongoDB. La mayoría de ellas pueden ser uti­li­za­das varias veces dentro del mismo pipeline. Un listado completo es muy extenso, sobre todo porque algunas solo son ne­ce­sa­rias para ope­ra­cio­nes muy es­pe­cí­fi­cas. Sin embargo, puedes hacerte una idea con las etapas más uti­li­za­das que aquí pre­se­n­ta­mos:

  • $count: ofrece un recuento de cuántos do­cu­me­n­tos BSON fueron co­n­si­de­ra­dos para la etapa o etapas en este pipeline.
  • $group: ordena y agrupa los do­cu­me­n­tos según ciertos pa­rá­me­tros.
  • $limit: reduce los do­cu­me­n­tos mostrados.
  • $match: limita los do­cu­me­n­tos que se uti­li­za­rán para la siguiente etapa.
  • $out: los re­su­l­ta­dos de la agre­ga­ción de MongoDB se incluyen en la colección. Este paso solo puede ser utilizado al final de un pipeline.
  • $project: se­le­c­cio­na campos es­pe­cí­fi­cos de una colección.
  • $skip: ignora una cantidad es­pe­cí­fi­ca de do­cu­me­n­tos. Esto se establece mediante una opción.
  • $sort: ordena do­cu­me­n­tos según un método de tu elección. Sin embargo, los do­cu­me­n­tos no se modifican más allá.
  • $unset: excluye ciertos campos y, por lo tanto, funciona como el opuesto de $project.

MongoDB ag­gre­ga­tion: ejemplos prácticos

Para entender mejor cómo funciona la agre­ga­ción de MongoDB en la práctica, te mostramos algunos ejemplos de di­fe­re­n­tes etapas y cómo uti­li­zar­las. Si quieres utilizar la agre­ga­ción de MongoDB, abre el shell como ad­mi­ni­s­tra­dor. No­r­ma­l­me­n­te, 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 es­pe­cí­fi­co. Por si­m­pli­ci­dad, esta base de datos solo contendrá diez do­cu­me­n­tos, todos es­tru­c­tu­ra­dos según el mismo esquema. Eje­m­pli­fi­ca­re­mos este esquema de la siguiente manera:

{ 
"name" : "Schmidt", 
"city" : "Berlin", 
"country" : "Germany", 
"quantity" : 14 
}
shell

La in­fo­r­ma­ción que conocen todos los co­m­pra­do­res es, por tanto, el nombre, el lugar de re­si­de­n­cia, el país y el número de productos ad­qui­ri­dos.

Si quieres probar la agre­ga­ción en MongoDB, utiliza el método insertMany ( ) para añadir todos los do­cu­me­n­tos 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 } 
] )
shell

Si creas esta entrada de esta forma, se mostrará una lista de distintos ID de objetos para cada documento in­di­vi­dual.

Cómo usar $match

Para ilustrar las ca­pa­ci­da­des de la agre­ga­ción de MongoDB, primero apli­ca­re­mos la etapa $match a nuestra colección “Clientes”. Sin ningún otro parámetro, esto si­m­ple­me­n­te nos de­vo­l­ve­ría la lista completa de los datos de clientes enu­me­ra­dos an­te­rio­r­me­n­te. Sin embargo, en el siguiente ejemplo, in­s­trui­mos al método para que nos muestre solo clientes de Italia. El comando co­rre­s­po­n­die­n­te sería este:

db.clientes.aggregate ( [ 
{ $match : { "country" : "Italy" } } 
] )
shell

La salida solo mostrará ahora los ide­n­ti­fi­ca­do­res 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 agre­ga­ció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 } } 
] )
shell

Limita el resultado con $project

Con las etapas uti­li­za­das hasta ahora, verás que el resultado es bastante extenso. Además de la in­fo­r­ma­ción real dentro de los do­cu­me­n­tos, siempre se incluye el ID de objeto, por ejemplo. Con la ayuda de $project, puedes de­te­r­mi­nar qué in­fo­r­ma­ción debe mostrarse en el pipeline de agre­ga­ción de MongoDB. Para ello, es­ta­ble­ce­mos el valor 1 para los campos ne­ce­sa­rios y el valor 0 para los campos in­ne­ce­sa­rios. En nuestro ejemplo, solo queremos ver el nombre del cliente y la cantidad de productos comprados. Por lo tanto, in­gre­sa­mos lo siguiente:

db.clientes.aggregate ( [ 
{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } } 
] )
shell

Combinar varias etapas para la agre­ga­ción MongoDB

La agre­ga­ción en MongoDB también ofrece siempre la opción de aplicar varias etapas su­ce­si­va­me­n­te. Estas se ejecutan una tras otra, y al final se obtiene un resultado que tiene en cuenta todos los pa­rá­me­tros deseados. Por ejemplo, si solo deseas mostrar los nombres y las compras de los clientes alemanes en orden de­s­ce­n­de­n­te, utiliza las etapas escritas an­te­rio­r­me­n­te 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
Consejo

¿Quieres saber más sobre MongoDB? En­co­n­tra­rás toda la in­fo­r­ma­ción en nuestra Digital Guide. Te ex­pli­ca­mos, por ejemplo, cómo funciona el comando List Databases y cómo utilizar MongoDB Sort para es­pe­ci­fi­car el orden de salida de tus datos.

Ir al menú principal