Una canalización de agregación consta de uno o más Etapas que procesan los documentos:
Cada etapa realiza una operación en los documentos de entrada. Por ejemplo, una etapa puede filtrar documentos, agruparlos y calcular valores.
Los documentos que salen de una etapa pasan a la siguiente etapa.
Una canalización de agregación puede devolver resultados para grupos de documentos. Por ejemplo, devolver los valores total, promedio, máximo y mínimo.
Puede actualizar documentos con un flujo de trabajo de agregación si utiliza las etapas que se muestran en Actualizaciones con flujo de trabajo de agregación.
Nota
Las tuberías de agregación se ejecutan con el
db.collection.aggregate()El método no modifica los documentos de una colección, a menos que la canalización contenga una etapa $merge $out o.
Puede ejecutar canalizaciones de agregación en la interfaz de usuario para implementaciones alojadas en MongoDB Atlas.
Cuando ejecutas pipelines de agregación en las implementaciones de MongoDB Atlas en la interfaz de usuario de MongoDB Atlas, puedes consultar una vista previa de los resultados en cada etapa.
Ejemplos completos de pipeline de agregación
La sección Tutoriales completos del pipeline de agregación contiene tutoriales completos que brindan explicaciones detalladas de las tareas de agregación comunes en un formato paso a paso. Los tutoriales incluyen ejemplos para MongoDB Shell y cada uno de los controladores oficiales de MongoDB.
Más detalles de la etapa de pipeline de agregación
Una pipeline de agregación consta de una o más etapas que procesan documentos:
Una etapa no tiene que producir un documento por cada documento de entrada. Por ejemplo, algunas etapas pueden producir nuevos documentos o filtrar documentos existentes.
La misma etapa puede aparecer varias veces en la pipeline con estas excepciones de etapa:
$out,$mergey$geoNear.
Para ver todas las etapas de agregación, consulta Etapas de agregación.
Expresiones y operadores
Algunas etapas de la canalización de agregación aceptan expresiones. Los operadores calculan valores basándose en las expresiones de entrada.
En el lenguaje del query de MongoDB, puedes crear expresiones a partir de los siguientes componentes:
Componente | Ejemplo |
|---|---|
Constantes |
|
Operadores | |
Expresiones de ruta de campo |
|
Por ejemplo, { $add: [ 3, "$inventory.total" ] } es una expresión que consta del operador $add y dos operandos:
La constante
3La expresión de ruta de campo
"$inventory.total"
La expresión devuelve el resultado de sumar 3 al valor en la ruta inventory.total del documento de entrada.
Rutas de campos
Expresiones de ruta de campo se utilizan para acceder a campos en documentos de entrada. Para especificar una ruta de campo, antepón el nombre del campo o la ruta de campo punteada (si el campo está en un documento incrustado) con un signo de dólar $. Por ejemplo, "$user" para especificar la ruta de campo del campo user o "$user.name" para especificar la ruta de campo al campo "user.name" incrustado.
"$<field>" es equivalente a "$$CURRENT.<field>" donde la CURRENT es una variable del sistema que por defecto es la raíz del objeto actual, a menos que se indique lo contrario en etapas específicas.
Para obtener más información y ejemplos, consulta Rutas de campos.
Ejecuta una pipeline de agregación
Para ejecutar una canalización de agregación, utilice:
Actualiza documentos con una pipeline de agregación
Para actualizar documentos con una canalización de agregación, utilice:
Otras consideraciones
Limitaciones de la canalización de agregación
Una pipeline de agregación tiene limitaciones en los tipos de valores y en el tamaño del resultado. Consulta Límites de la pipeline de agregación.
Pipelines de agregación y colecciones fragmentadas
Una pipeline de agregación admite operaciones en colecciones fragmentadas. Consulta Pipelines de agregación y colecciones fragmentadas.
Pipelines de agregación como alternativa de map-reduce
A partir de MongoDB 5.0, map-reduce está obsoleto:
En lugar de map-reduce, deberías usar una pipeline de agregación. Las pipelines de agregación ofrecen un mejor rendimiento y capacidad de uso que map-reduce.
Puedes reescribir las operaciones map-reduce mediante etapas de pipeline de agregación, como
$group,$mergey otras.Para las operaciones map-reduce que requieren una funcionalidad personalizada, puedes utilizar los operadores de agregación
$accumulatory$function. Puedes utilizar esos operadores para definir expresiones de agregación personalizadas en JavaScript.
Para ejemplos de alternativas de pipeline de agregación a map-reduce, consulte:
Obtén más información
Para obtener más información sobre las pipelines de agregación, consulta: