Share via


Introducción a la canalización de agregación

La canalización de agregación es una herramienta eficaz que permite a los desarrolladores realizar análisis avanzados de datos y manipulación en sus colecciones. La canalización es una secuencia de operaciones de procesamiento de datos, que se realizan en los documentos de entrada para generar una salida calculada. Las fases de canalización procesan los documentos de entrada y pasan el resultado a la siguiente fase. Cada fase realiza una operación específica en los datos, como el filtrado, la agrupación, la ordenación y la transformación.

Sintaxis básica

La sintaxis básica de una canalización de agregación es la siguiente:

db.collection.aggregate([    { stage1 },    { stage2 },    ...    { stageN }])

Donde db.collection es la colección de MongoDB en la que desea realizar la agregación, y stage1, stage2, etc. y stageN son las fases de canalización que quiere aplicar.

Fases de ejemplo

Cosmos DB para MongoDB proporciona una amplia gama de fases que puede usar en la canalización, entre las cuales se incluyen las siguientes:

  • $match: filtra los documentos para pasar solo los documentos que coinciden con la condición especificada.
  • $project: transforma los documentos en un nuevo formulario agregando, quitando o actualizando campos.
  • $group: agrupa documentos por uno o varios campos y realiza varias funciones de agregado en los datos agrupados.
  • $sort: ordena los documentos en función de los campos especificados.
  • $skip: omite solo el número especificado de documentos.
  • $limit: limita el número de documentos pasados a la siguiente fase.
  • $unwind: deconstruye un campo de matriz de los documentos de entrada para generar un documento para cada elemento.

Para ver todas las fases disponibles, consulte las características admitidas.

Ejemplos

Estos son algunos ejemplos de cómo puede usar la canalización de agregación para realizar varias operaciones en los datos:

Filtrado: para filtrar documentos con un campo de "cantidad" superior a 20, puede usar la canalización siguiente:

db.collection.aggregate([
    { $match: { quantity: { $gt: 20 } } }
])

Agrupación: para agrupar documentos por el campo "categoría" y calcular la "cantidad" total de cada grupo, puede usar la canalización siguiente:

db.collection.aggregate([
    { $group: { _id: "$category", totalQuantity: { $sum: "$quantity" } } }
])

Ordenación: para ordenar documentos por el campo "precio" en orden descendente, puede usar la canalización siguiente:

db.collection.aggregate([
    { $sort: { price: -1 } }
])

Transformación: para agregar un nuevo campo "descuento" a los documentos que tienen un "precio" mayor que 100, puede usar la siguiente canalización:

db.collection.aggregate([
    { $project: { item: 1, price: 1, discount: { $cond: [{ $gt: ["$price", 100] }, 10, 0 ] } } }
])

Desenredado: para separar todos los subdocumentos del campo de matriz "tags" y crear un nuevo documento para cada valor, puede usar la canalización siguiente:

db.collection.aggregate([
    { $unwind: "$tags" }
])

Ejemplo con varias fases

db.sales.aggregate([
  { $match: { date: { $gte: "2021-01-01", $lt: "2021-03-01" } } },
  { $group: { _id: "$category", totalSales: { $sum: "$sales" } } },
  { $sort: { totalSales: -1 } },
  { $limit: 5 }
])

En este ejemplo, se usa una colección de ejemplo denominada "sales" que tiene documentos con los siguientes campos: "date", "category" y "sales".

La primera fase, { $match: { date: { $gte: "2021-01-01", $lt: "2021-03-01" } } }, filtra los documentos por el campo "date" y solo pasa los documentos con fecha entre el 1 de enero de 2021 y el 28 de febrero de 2021. Usamos un formato de fecha de cadena con el formato "AAAA-MM-DD".

La segunda fase, { $group: { _id: "$category", totalSales: { $sum: "$sales" } } }, agrupa los documentos por el campo "categoría" y calcula las ventas totales de cada grupo.

La tercera fase, { $sort: { totalSales: -1 }, ordena los documentos por el campo "totalSales" en orden descendente.

La cuarta fase, { $limit: 5 }, limita el número de documentos pasados a la siguiente fase a solo los 5 principales.

Como resultado, la canalización devolverá las cinco categorías principales por ventas totales para el intervalo de fechas especificado.

Pasos siguientes