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
/ /

Ejecutar pipelines de agregación

Puedes ejecutar pipelines de agregación en tus colecciones utilizando el MongoDB Shell. Las pipelines de agregación transforman tus documentos en resultados agregados basados en etapas de pipelineseleccionadas.

Los usos comunes de la agregación incluyen:

  • Agrupación de datos según 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 dado.

  • Ordenando datos.

Cuando ejecutas una agregación, MongoDB Shell muestra los resultados directamente en la terminal.

El pipeline de agregación de MongoDB consta de etapas. Cada etapa transforma los documentos a medida que atraviesan el pipeline. Las etapas de la pipeline no necesitan producir un documento de salida para cada documento de entrada; por ejemplo, algunas etapas pueden generar nuevos documentos o filtrar documentos.

Para crear un pipeline de agregación, utiliza la siguiente sintaxis en la MongoDB Shell:

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

Los ejemplos en esta página hacen referencia al conjunto de datos de muestrade MongoDB. Para aprender más sobre cómo configurar implementaciones y poblar un clúster con los datos de ejemplo, consulte Comienza con MongoDB.

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

Cada documento en 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 se encuentran en la colección sample_mflix.movies. Utiliza 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 pipeline realiza una agregación en cuatro etapas:

Primera etapa

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

  • genres

  • imdb

  • title

Los documentos de la colección que no incluyan todos estos campos no se transmiten a la siguiente etapa del pipeline.

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, consulta el Manual de MongoDB.

La etapa $project transforma el documento de ejemplo y pasa la siguiente salida a la siguiente etapa del pipeline:

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

La etapa $unwind pasa un documento por cada elemento en el arreglo genres a la siguiente etapa del pipeline.

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

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 distintos de género de los documentos que recibe de la etapa anterior de la 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 de la pipeline.

Esta etapa envía documentos que se asemejan a los siguientes a la siguiente etapa del pipeline:

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 $sort ordena los documentos que recibe de la etapa anterior en orden descendente según el valor del campo averageGenreRating.

Cuando ejecutas el pipeline de ejemplo, la MongoDB Shell imprime en la terminal documentos similares a los siguientes:

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