Un pipeline de agregación consta de uno o más etapas que procesan documentos. Estos documentos pueden provenir de una colección, una vista o de una etapa especialmente diseñada.
Cada etapa realiza una operación sobre los documentos de entrada. Por ejemplo, una etapa puede $filter documentos, $group documentos, y calcular valores. Los documentos que una etapa genera se pasan luego a la siguiente etapa en el pipeline.
Una pipeline de agregación puede devolver resultados para grupos de documentos. También puedes actualizar documentos con una pipeline de agregación con las etapas que se muestran en Actualizaciones con pipeline de agregación.
Nota
Las pipelines de agregación que se ejecutan con el método db.collection.aggregate() no modifican los documentos en una colección, a menos que la pipeline contenga una etapa $merge o $out.
Puede ejecutar pipelines 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 de la canalización de agregación contiene tutoriales paso a paso para tareas de agregación comunes, con 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 necesita generar un documento por cada documento de entrada. Algunas etapas generan documentos nuevos o filtran documentos.
La misma etapa puede aparecer varias veces en una secuencia, excepto
$outpara,$merge$geoNeary.
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
Las expresiones de ruta de campo acceden a los campos de los documentos de entrada. Anteponga el signo de dólar al nombre del $ campo. Por ejemplo, "$user" hace referencia al user campo, y "$user.name" hace referencia al user.name campo incrustado.
"$<field>" es equivalente "$$CURRENT.<field>" a, donde es una variable del sistema que por defecto toma la raíz del objeto actual a menos que una etapa especifique lo CURRENT contrario.
Para ver más ejemplos, consulte Rutas de campo.
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
Para conocer los límites en los tipos de valores y el tamaño de los resultados, consulte Límites de la canalización de agregación.
Pipelines de agregación y colecciones fragmentadas
Las canalizaciones de agregación admiten operaciones en colecciones fragmentadas. Consulte Canalización 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:
Acceso a los índices de elementos de arreglos en $map, $filter y $reduce
MongoDB 8.3 mejora el acceso a los índices de elementos de arreglos en las expresiones de agregación de $map, $filter y $reduce. Puedes usar el nuevo campo arrayIndexAs para establecer una variable que almacene el índice de un elemento de un arreglo. También puedes utilizar la nueva variable del sistema de agregación $$IDX para acceder al índice del elemento actual del arreglo si omites arrayIndexAs.
Obtén más información
Para obtener más información sobre las pipelines de agregación, consulta: