Para obtener los datos necesarios para representar un gráfico, Charts crea una canalización de agregación de MongoDB y la ejecuta en el servidor de base de datos MongoDB. La canalización consta de varias etapas, cada una generada según diferentes configuraciones especificadas por el autor del gráfico.
Este documento explica cómo se utilizan las distintas configuraciones del Generador de Gráficos para construir la canalización de agregación. Puede ver la canalización utilizada para crear un gráfico seleccionando View Aggregation Pipeline opción en el menú desplegable de puntos suspensivos del Generador de gráficos en la parte superior derecha.
Los gráficos Atlas construyen una tubería que consta de los siguientes segmentos en el siguiente orden:
Nota
Al crear un gráfico, puede configurar algunos de los segmentos anteriores, pero no todos. Cuando Charts genera la canalización de agregación, omite los segmentos no especificados.
Ejemplo
La siguiente gráfica muestra el total de ventas de una empresa de suministros de oficina, clasificado por método de compra. Cada documento de la recopilación de datos representa una sola venta.
Usando este gráfico como ejemplo, exploraremos cómo las especificaciones para cada una de las configuraciones anteriores cambian el flujo de agregación generado por Atlas Charts.

Codificación
Sin ninguna canalización Data Source, consultas de barra Query, campos calculados ni filtros agregados en el panel Filter, Atlas Charts genera la siguiente canalización de agregación:
1 { 2 "$addFields": { // Encoding 3 "__alias_0": { 4 "$sum": "$items.price" 5 } 6 } 7 }, 8 { 9 "$group": { 10 "_id": { 11 "__alias_1": "$purchaseMethod" 12 }, 13 "__alias_0": { 14 "$sum": "$__alias_0" 15 } 16 } 17 }, 18 { 19 "$project": { 20 "_id": 0, 21 "__alias_1": "$_id.__alias_1", 22 "__alias_0": 1 23 } 24 }, 25 { 26 "$project": { 27 "x": "$__alias_1", 28 "y": "$__alias_0", 29 "_id": 0 30 } 31 }, 32 33 { 34 "$addFields": { // Sorting 35 "__agg_sum": { 36 "$sum": [ 37 "$y" 38 ] 39 } 40 } 41 }, 42 { 43 "$sort": { 44 "__agg_sum": -1 45 } 46 }, 47 { 48 "$project": { 49 "__agg_sum": 0 50 } 51 }, 52 { 53 "$limit": 5000 54 }
En este punto, la tubería consta de grupos del panel Encode, etapas para el orden de clasificación predeterminado y el límite máximo de documentos, que Atlas Charts establece en 5000.
Agregar consultas
La consulta a continuación restringe los documentos mostrados solo a aquellos con un saleDate igual o más reciente que January 1, 2017 con al menos 5 elementos en la matriz items. items es una matriz donde cada elemento es un artículo comprado durante una venta.
Consulta:
{ $and: [ { saleDate: { $gte: new Date("2017-01-01") } }, { 'items.4': { $exists: true } } ] }
Al aplicar la consulta anterior en la barra Query se genera el siguiente gráfico y canalización de agregación:

Tubería de agregación:
1 { 2 "$match": { // Query 3 "$and": [ 4 { 5 "saleDate": { 6 "$gte": { 7 "$date": "2017-01-01T00:00:00Z" 8 } 9 } 10 }, 11 { 12 "items.4": { 13 "$exists": true 14 } 15 } 16 ] 17 } 18 }, 19 { 20 "$addFields": { 21 "__alias_0": { 22 "$sum": "$items.price" 23 } 24 } 25 }, 26 { 27 "$group": { 28 "_id": { 29 "__alias_1": "$purchaseMethod" 30 }, 31 "__alias_0": { 32 "$sum": "$__alias_0" 33 } 34 } 35 }, 36 { 37 "$project": { 38 "_id": 0, 39 "__alias_1": "$_id.__alias_1", 40 "__alias_0": 1 41 } 42 }, 43 { 44 "$project": { 45 "x": "$__alias_1", 46 "y": "$__alias_0", 47 "_id": 0 48 } 49 }, 50 { 51 "$addFields": { 52 "__agg_sum": { 53 "$sum": [ 54 "$y" 55 ] 56 } 57 } 58 }, 59 { 60 "$sort": { 61 "__agg_sum": -1 62 } 63 }, 64 { 65 "$project": { 66 "__agg_sum": 0 67 } 68 }, 69 { 70 "$limit": 5000 71 }
El proceso de agregación ahora comienza con la consulta aplicada y es seguido por los grupos seleccionados en el panel Encode y el límite máximo de documentos.
Agregar campos calculados
También podemos modificar el gráfico para mostrar los ingresos totales generados, clasificados por método de compra. Para ello, crearemos un campo calculado que calcule los ingresos totales multiplicando el precio por la cantidad. Al añadir este nuevo campo calculado, además de la consulta anterior, se obtiene el siguiente gráfico y pipeline:
Expresión de campo calculada:

Tubería de agregación:
1 { 2 "$match": { 3 "$and": [ 4 { 5 "saleDate": { 6 "$gte": { 7 "$date": "2017-01-01T00:00:00Z" 8 } 9 } 10 }, 11 { 12 "items.4": { 13 "$exists": true 14 } 15 } 16 ] 17 } 18 }, 19 { 20 "$addFields": { // Calculated Field 21 "revenue": { 22 "$reduce": { 23 "input": "$items", 24 "initialValue": 0, 25 "in": { 26 "$sum": [ 27 "$$value", 28 { 29 "$multiply": [ 30 "$$this.price", 31 "$$this.quantity" 32 ] 33 } 34 ] 35 } 36 } 37 } 38 } 39 }, 40 { 41 "$group": { 42 "_id": { 43 "__alias_0": "$purchaseMethod" 44 }, 45 "__alias_1": { 46 "$sum": "$revenue" 47 } 48 } 49 }, 50 { 51 "$project": { 52 "_id": 0, 53 "__alias_0": "$_id.__alias_0", 54 "__alias_1": 1 55 } 56 }, 57 { 58 "$project": { 59 "x": "$__alias_0", 60 "y": "$__alias_1", 61 "_id": 0 62 } 63 }, 64 { 65 "$addFields": { 66 "__agg_sum": { 67 "$sum": [ 68 "$y" 69 ] 70 } 71 } 72 }, 73 { 74 "$sort": { 75 "__agg_sum": -1 76 } 77 }, 78 { 79 "$project": { 80 "__agg_sum": 0 81 } 82 }, 83 { 84 "$limit": 5000 85 }
La canalización actualizada ahora incluye el campo calculado justo debajo de la consulta aplicada en la barra Query mientras que el orden del resto de los componentes permanece sin cambios.
Agregar filtros
Este gráfico se puede refinar aún más añadiendo un filtro en el panel Filter para seleccionar solo las ventas en tienda realizadas en la sucursal de Nueva York. Al añadir este filtro, se obtiene el siguiente gráfico y canal de agregación:

Tubería de agregación:
1 { 2 "$match": { 3 "$and": [ 4 { 5 "saleDate": { 6 "$gte": { 7 "$date": "2017-01-01T00:00:00Z" 8 } 9 } 10 }, 11 { 12 "items.4": { 13 "$exists": true 14 } 15 } 16 ] 17 } 18 }, 19 { 20 "$addFields": { 21 "revenue": { 22 "$reduce": { 23 "input": "$items", 24 "initialValue": 0, 25 "in": { 26 "$sum": [ 27 "$$value", 28 { 29 "$multiply": [ 30 "$$this.price", 31 "$$this.quantity" 32 ] 33 } 34 ] 35 } 36 } 37 } 38 } 39 }, 40 { 41 "$match": { // Filter 42 "storeLocation": { 43 "$in": [ 44 "New York" 45 ] 46 } 47 } 48 }, 49 { 50 "$group": { 51 "_id": { 52 "__alias_0": "$purchaseMethod" 53 }, 54 "__alias_1": { 55 "$sum": "$revenue" 56 } 57 } 58 }, 59 { 60 "$project": { 61 "_id": 0, 62 "__alias_0": "$_id.__alias_0", 63 "__alias_1": 1 64 } 65 }, 66 { 67 "$project": { 68 "x": "$__alias_0", 69 "y": "$__alias_1", 70 "_id": 0 71 } 72 }, 73 { 74 "$addFields": { 75 "__agg_sum": { 76 "$sum": [ 77 "$y" 78 ] 79 } 80 } 81 }, 82 { 83 "$sort": { 84 "__agg_sum": -1 85 } 86 }, 87 { 88 "$project": { 89 "__agg_sum": 0 90 } 91 }, 92 { 93 "$limit": 5000 94 }
El pipeline ahora incluye el filtro storeLocation justo debajo del campo calculado, mientras que el orden del resto de los componentes sigue siendo el mismo.