Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Respaldo pipeline de agregación

Para obtener los datos necesarios para renderizar una gráfica, Charts crea un Pipeline de Agregación de MongoDB y ejecuta el pipeline en el servidor de base de datos de MongoDB. La pipeline consiste en múltiples etapas, cada una de las cuales se genera según diferentes configuraciones especificadas por el autor de la gráfica.

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 Charts

  2. Prefiltros en gráficas de incrustación

  3. Filtros del tablero

  4. gráfica query

  5. Campos de búsqueda

  6. Campos calculados

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

  8. Filtros de gráficas

  9. Campos codificados

  10. Clasificación

  11. Límite máximo de documentos

Nota

Al crear una gráfica, puedes configurar algunos, pero no todos, de los segmentos de la gráfica anterior. Cuando Charts genera el pipeline 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 pipeline de agregación sin ningún filtro.
haga clic para ampliar

Sin ningún Data Source pipeline, Query consultas de barra, campos calculados ni filtros añadidos en el panel Filter, Atlas Charts genera el siguiente pipeline 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, el pipeline consta de grupos del panel Encode, etapas para el orden de clasificación por defecto y el límite máximo de documentos, que está establecido en 5000 por Atlas Charts.

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 el arreglo items. items es un arreglo donde cada elemento es un artículo comprado durante una venta.

query:

{
$and: [
{
saleDate: { $gte: new Date("2017-01-01") }
},
{
'items.4': { $exists: true }
} ]
}

La aplicación de la Query anterior en la barra genera la siguiente gráfica y pipeline de agregación:

Ejemplo de pipeline de agregación con query.
haga clic para ampliar

pipeline 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 pipeline de agregación ahora comienza con la query aplicada, y está seguido por los grupos seleccionados en el panel Encode y el límite máximo de documentos.

También podemos cambiar la gráfica para mostrar la ganancia total generada categorizado por método de compra. Para realizar esta tarea, crearemos un campo calculado para obtener la ganancia total multiplicando el precio por la cantidad. Al agregar este nuevo campo calculado, además de la query anterior, se produce la siguiente gráfica y pipeline:

Expresión de campo calculado:

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

pipeline 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.

Esta gráfica 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 ubicación de Nueva York. Agregar este filtro produce la siguiente gráfica y pipeline de agregación:

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

pipeline 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