Docs Menu
Docs Home
/ /

Respaldo pipeline de agregación

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:

  1. Vistas de gráficos

  2. Prefiltros en gráficos incrustados

  3. Filtros del panel de control

  4. Consulta de gráficos

  5. Campos de búsqueda

  6. Campos calculados

  7. Incorporación de filtros, incluidos los filtros inyectados

  8. Filtros de gráficos

  9. Campos codificados

  10. Clasificación

  11. Límite máximo de documentos

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.

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.

Ejemplo de canalización de agregación sin ningún filtro.
haga clic para ampliar

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.

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:

Ejemplo de canalización de agregación con consulta.
haga clic para ampliar

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.

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:

Ejemplo de canalización de agregación con campo calculado.
haga clic para ampliar

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.

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:

Ejemplo de canalización de agregación con filtro.
haga clic para ampliar

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.

Volver

Modo de subconjunto

En esta página