Docs Menu
Docs Home
/ /

Ejecutar pipelines de agregación

Puedes correr Canalizaciones de agregación en sus colecciones mediante MongoDB Shell. Las canalizaciones de agregación transforman sus documentos en resultados agregados según las etapas seleccionadas.

Los usos comunes de la agregación incluyen:

  • Agrupar datos mediante una expresión dada.

  • Calcular resultados basados ​​en múltiples campos y almacenar esos resultados en un nuevo campo.

  • Filtrar datos para devolver un subconjunto que coincida con un criterio determinado.

  • Ordenar datos.

Cuando se ejecuta una agregación, MongoDB Shell envía los resultados directamente a la terminal.

La canalización de agregación de MongoDB consta de etapas. Cada etapa transforma los documentos a medida que pasan por la canalización. Las etapas de la canalización no necesitan generar un documento de salida por cada documento de entrada; por ejemplo, algunas etapas pueden generar nuevos documentos o filtrarlos.

Para crear una canalización de agregación, utilice la siguiente sintaxis en MongoDB Shell:

1db.<collection>.aggregate([
2 {
3 <$stage1>
4 },
5 {
6 <$stage2>
7 }
8 ...
9])

Los ejemplos de esta página hacen referencia al conjunto de datos de muestra de Atlas. Puede crear un clúster de Atlas gratuito y rellenarlo con datos de muestra para seguir estos ejemplos. Para obtener más información sobre la configuración de implementaciones, consulte Introducción a MongoDB.

El siguiente ejemplo utiliza el movies colección en el conjunto de datos de muestra Atlas sample_mflix.

Cada documento de la colección movies describe una película:

1{
2 _id: 573a1397f29313caabce8347,
3 fullplot: 'In a cyberpunk vision of the future, man has developed the technology to create replicants, human clones used to serve in the colonies outside Earth but with fixed lifespans. In Los Angeles, 2019, Deckard is a Blade Runner, a cop who specializes in terminating replicants. Originally in retirement, he is forced to re-enter the force when four replicants escape from an off-world colony to Earth.',
4 imdb: { rating: 8.2, votes: 419589, id: 83658 },
5 year: 1982,
6 plot: 'A blade runner must pursue and try to terminate four replicants who stole a ship in space and have returned to Earth to find their creator.',
7 genres: [ 'Sci-Fi', 'Thriller' ],
8 rated: 'R',
9 metacritic: 88,
10 title: 'Blade Runner',
11 lastupdated: '2015-09-04 00:05:51.990000000',
12 languages: [ 'English', 'German', 'Cantonese', 'Japanese', 'Hungarian' ],
13 writers: [
14 'Hampton Fancher (screenplay)',
15 'David Webb Peoples (screenplay)',
16 'Philip K. Dick (novel)'
17 ],
18 type: 'movie',
19 tomatoes: {
20 viewer: { rating: 4, numReviews: 331213, meter: 91 },
21 dvd: 1997-08-27T00:00:00.000Z,
22 critic: { rating: 8.5, numReviews: 102, meter: 90 },
23 lastUpdated: 2015-09-12T17:48:21.000Z,
24 consensus: "Misunderstood when it first hit theaters, the influence of Ridley Scott's mysterious, neo-noir Blade Runner has deepened with time. A visually remarkable, achingly human sci-fi masterpiece.",
25 rotten: 10,
26 production: 'Warner Bros. Pictures',
27 fresh: 92
28 },
29 poster: 'https://m.media-amazon.com/images/M/MV5BNzQzMzJhZTEtOWM4NS00MTdhLTg0YjgtMjM4MDRkZjUwZDBlXkEyXkFqcGdeQXVyNjU0OTQ0OTY@._V1_SY1000_SX677_AL_.jpg',
30 num_mflix_comments: 1,
31 released: 1982-06-25T00:00:00.000Z,
32 awards: {
33 wins: 13,
34 nominations: 15,
35 text: 'Nominated for 2 Oscars. Another 11 wins & 15 nominations.'
36 },
37 countries: [ 'USA', 'Hong Kong', 'UK' ],
38 cast: [
39 'Harrison Ford',
40 'Rutger Hauer',
41 'Sean Young',
42 'Edward James Olmos'
43 ],
44 directors: [ 'Ridley Scott' ],
45 runtime: 117
46}

Los documentos agregados en este tutorial residen en la colección sample_mflix.movies. Utilice el siguiente comando para cambiar a la base de datos que contiene esta colección:

use sample_mflix

Considere la siguiente tubería:

1db.movies.aggregate([
2
3 // First Stage
4
5 { $project: { _id: 0, genres: 1, imdb: 1, title: 1 } },
6
7 // Second Stage
8
9 { $unwind: "$genres" },
10
11 // Third Stage
12
13 { $group:
14 { _id: "$genres",
15 averageGenreRating: { $avg: "$imdb.rating" }
16 }
17 },
18
19 // Fourth Stage
20
21 { $sort: { averageGenreRating: -1 } }
22] )

Esta canalización realiza una agregación en cuatro etapas:

Primera etapa

La $project etapa pasa los documentos que contienen los siguientes campos a la siguiente etapa del pipeline:

  • genres

  • imdb

  • title

Los documentos de la colección que no incluyen todos estos campos no pasan a la siguiente etapa del proceso.

Nota

La etapa $project especifica _id: 0 para suprimir el campo _id de los documentos que pasa a la siguiente etapa.

Para obtener más información, consulte el Manual de MongoDB.

La etapa $project transforma el documento de ejemplo y pasa la siguiente salida a la siguiente etapa de la canalización:

1{
2 imdb: { rating: 8.2, votes: 419589, id: 83658 },
3 genres: [ 'Sci-Fi', 'Thriller' ],
4 title: 'Blade Runner'
5}
Segunda etapa

La etapa pasa un documento por cada elemento de $unwind la genres matriz a la siguiente etapa de la canalización.

La etapa $unwind genera los dos documentos siguientes a partir del documento de ejemplo original y luego los pasa a la siguiente etapa del proceso:

1{
2 imdb: { rating: 8.2, votes: 419589, id: 83658 },
3 genres: 'Sci-Fi',
4 title: 'Blade Runner'
5}
1{
2 imdb: { rating: 8.2, votes: 419589, id: 83658 },
3 genres: 'Thriller',
4 title: 'Blade Runner'
5}
Tercera etapa

La etapa de $group:

  • Recupera los valores de género distintos de los documentos que recibe de la etapa anterior del pipeline.

  • Crea un documento para cada género distinto donde _id es el nombre del género.

  • Agrega un campo, averageGenreRating, a cada nuevo documento que contiene el promedio imdb.rating de todos los documentos que coinciden con el género, y

  • Pasa los nuevos documentos a la siguiente etapa del pipeline.

Esta etapa envía documentos similares a los siguientes a la siguiente etapa del proceso de canalización:

1{ _id: 'Sport', averageGenreRating: 6.781233933161954 },
2{ _id: 'History', averageGenreRating: 7.202306920762287 },
3{ _id: 'Biography', averageGenreRating: 7.097142857142857 },
4{ _id: 'Adventure', averageGenreRating: 6.527788649706458 },
5{ _id: 'Family', averageGenreRating: 6.36096256684492 },
6{ _id: 'Crime', averageGenreRating: 6.730478683620045 },
7{ _id: 'Western', averageGenreRating: 6.879197080291971 },
8{ _id: 'Fantasy', averageGenreRating: 6.42495652173913 },
9{ _id: 'Talk-Show', averageGenreRating: 7 },
10{ _id: 'Documentary', averageGenreRating: 7.365266635205286 },
11{ _id: 'War', averageGenreRating: 7.183944374209861 },
12{ _id: 'Short', averageGenreRating: 7.355813953488372 },
13{ _id: 'Horror', averageGenreRating: 5.84110718492344 },
14{ _id: 'Film-Noir', averageGenreRating: 7.503809523809523 },
15{ _id: 'News', averageGenreRating: 7.254901960784314 },
16{ _id: 'Thriller', averageGenreRating: 6.322121555303888 },
17{ _id: 'Action', averageGenreRating: 6.3774842271293375 },
18{ _id: 'Music', averageGenreRating: 6.923452380952381 },
19{ _id: 'Animation', averageGenreRating: 6.917993795243019 },
20{ _id: 'Drama', averageGenreRating: 6.830528688822631 }
Cuarta Etapa
La etapa ordena los documentos que recibe de la etapa anterior en orden descendente según el valor $sort del averageGenreRating campo.

Cuando ejecuta la canalización de ejemplo, MongoDB Shell imprime documentos similares al siguiente en la terminal:

1[
2 { _id: 'Film-Noir', averageGenreRating: 7.503809523809523 },
3 { _id: 'Documentary', averageGenreRating: 7.365266635205286 },
4 { _id: 'Short', averageGenreRating: 7.355813953488372 },
5 { _id: 'News', averageGenreRating: 7.254901960784314 },
6 { _id: 'History', averageGenreRating: 7.202306920762287 },
7 { _id: 'War', averageGenreRating: 7.183944374209861 },
8 { _id: 'Biography', averageGenreRating: 7.097142857142857 },
9 { _id: 'Talk-Show', averageGenreRating: 7 },
10 { _id: 'Music', averageGenreRating: 6.923452380952381 },
11 { _id: 'Animation', averageGenreRating: 6.917993795243019 },
12 { _id: 'Western', averageGenreRating: 6.879197080291971 },
13 { _id: 'Drama', averageGenreRating: 6.830528688822631 },
14 { _id: 'Sport', averageGenreRating: 6.781233933161954 },
15 { _id: 'Crime', averageGenreRating: 6.730478683620045 },
16 { _id: 'Musical', averageGenreRating: 6.696913580246913 },
17 { _id: 'Romance', averageGenreRating: 6.695711554220159 },
18 { _id: 'Mystery', averageGenreRating: 6.563317384370015 },
19 { _id: 'Adventure', averageGenreRating: 6.527788649706458 },
20 { _id: 'Comedy', averageGenreRating: 6.479626461362988 },
21 { _id: 'Fantasy', averageGenreRating: 6.42495652173913 }
22]

Tip

Volver

Borrar

Obtén una insignia de habilidad

Domina los “Fundamentos de la transformación de datos” de forma gratuita.

Más información

En esta página