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

Agregación

En esta guía, puedes aprender a utilizar el controlador MongoDB .NET/C# para realizar operaciones de agregación.

Las operaciones de agregación procesan los datos en las colecciones de MongoDB y devuelven resultados calculados. El marco de agregación de MongoDB está modelado según el concepto de pipeline de procesamiento de datos. Los documentos entran en un pipeline compuesto por una o varias etapas, y este pipeline transforma los documentos en un resultado agregado.

Las operaciones de agregación funcionan de manera similar a las fábricas de automóviles con líneas de ensamblaje. Las líneas de ensamblaje cuentan con estaciones dotadas de herramientas especializadas para llevar a cabo tareas específicas. Por ejemplo, al fabricar un automóvil, la línea de ensamblaje comienza con el chasis. Luego, a medida que el bastidor del auto avanza por la línea de montaje, cada estación ensambla una pieza diferente. El resultado es un producto final transformado, el auto terminado.

La línea de montaje representa el pipeline de agregación, las estaciones individuales representan las etapas de agregación, las herramientas especializadas representan los operadores de expresión y el producto final representa el resultado agregado.

La siguiente tabla enumera las diferentes tareas que se pueden realizar con las operaciones de búsqueda, en comparación con las que se pueden lograr con las operaciones de agregación. El marco de agregación ofrece una funcionalidad ampliada que permite transformar y manipular los datos.

Operaciones de búsqueda
Operaciones de agregación
Select certain documents to return
Select which fields to return
Sort the results
Limit the results
Count the results
Select certain documents to return
Select which fields to return
Sort the results
Limit the results
Count the results
Group the results
Rename fields
Compute new fields
Summarize data
Connect and merge data sets

Considere lo siguiente limitaciones al realizar operaciones de agregación:

  • Los documentos devueltos no deben violar el límite de tamaño de documento BSON de 16 megabytes.

  • Las etapas de pipeline tienen un límite de memoria de 100 megabytes por defecto. Si es necesario, puede superar este límite configurando la propiedad AllowDiskUse del AggregateOptions objeto que se pasa al método Aggregate().

  • La etapa $graphLookup tiene un límite estricto de memoria de 100 megabytes y omite la propiedad AllowDiskUse.

Para realizar una agregación, pase una lista de etapas de agregación al método IMongoCollection<TDocument>.Aggregate().

Nota

Este ejemplo utiliza la colección sample_restaurants.restaurants de los conjuntos de datos de muestra Atlas. Para aprender cómo crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulta Inicio rápido.

El siguiente ejemplo de código produce un recuento del número de panaderías en cada distrito de la ciudad de Nueva York. Para ello, utiliza una pipeline de agregación que contiene las siguientes etapas:

  • Una etapa $match para filtrar documentos cuyo campo cuisine contenga el valor "Bakery".

  • Una etapa $group para agrupar los documentos coincidentes por el campo borough, acumulando un conteo de documentos para cada valor distinto de ese campo.

Las siguientes secciones implementan este ejemplo mediante el uso de los enfoques LINQ, Builders y BsonDocument para crear y combinar las etapas de agregación utilizadas en la canalización de ejemplo.

// Defines a queryable collection object as a prerequisite to using LINQ
var queryableCollection = collection.AsQueryable();
// Defines the query with $match and $group stages
var query = queryableCollection
.Where(r => r.Cuisine == "Bakery")
.GroupBy(r => r.Borough)
.Select(g => new { _id = g.Key, Count = g.Count() });
// Executes the query and prints the aggregated results
foreach (var result in query.ToList())
{
Console.WriteLine(result);
}
{ _id = Bronx, Count = 71 }
{ _id = Brooklyn, Count = 173 }
{ _id = Staten Island, Count = 20 }
{ _id = Missing, Count = 2 }
{ _id = Manhattan, Count = 221 }
{ _id = Queens, Count = 204 }

Para aprender más sobre cómo usar LINQ para crear pipelines de agregación, consulte la guía Sintaxis LINQ para Operaciones de Agregación.

// Defines the $match aggregation stage
var matchFilter = Builders<Restaurant>.Filter.Eq(r => r.Cuisine, "Bakery");
// Defines the aggregation pipeline with the $match and $group aggregation stages
var pipeline = new EmptyPipelineDefinition<Restaurant>()
.Match(matchFilter)
.Group(r => r.Borough,
g => new
{
_id = g.Key,
Count = g.Count()
}
);
// Executes the aggregation pipeline
var results = collection.Aggregate(pipeline).ToList();
// Prints the aggregated results
foreach (var result in results)
{
Console.WriteLine(result);
}
{ _id = Bronx, Count = 71 }
{ _id = Brooklyn, Count = 173 }
{ _id = Staten Island, Count = 20 }
{ _id = Missing, Count = 2 }
{ _id = Manhattan, Count = 221 }
{ _id = Queens, Count = 204 }

Para obtener más información sobre cómo usar builders para construir pipelines de agregación, consulte la sección Compilar un pipeline de agregación de la guía "Operaciones con desarrolladores".

// Defines the $match and $group aggregation stages
var matchStage = new BsonDocument
{
{
"$match",
new BsonDocument
{
{ "cuisine", "Bakery" }
}
}
};
var groupStage = new BsonDocument
{
{
"$group",
new BsonDocument
{
{ "_id", "$borough" },
{ "count", new BsonDocument("$sum", 1) }
}
}
};
// Executes the aggregation pipeline
var pipeline = new[] { matchStage, groupStage };
var results = collection.Aggregate<BsonDocument>(pipeline).ToList();
// Prints the aggregated results
foreach (BsonDocument result in results)
{
Console.WriteLine(result);
}
{ "_id" : "Brooklyn", "count" : 173 }
{ "_id" : "Manhattan", "count" : 221 }
{ "_id" : "Bronx", "count" : 71 }
{ "_id" : "Missing", "count" : 2 }
{ "_id" : "Staten Island", "count" : 20 }
{ "_id" : "Queens", "count" : 204 }

Para obtener una lista completa de las etapas de agregación, consulta Etapas de agregación en el manual de MongoDB Server.

Para obtener más información sobre cómo ensamblar un pipeline de agregación y ver ejemplos, consulte Pipeline de agregación.

Para obtener más información sobre cómo crear etapas de canalización, consulte Etapas de agregación.

Para aprender sobre cómo explicar las operaciones de agregación de MongoDB, consulta Resultados de Explicación y Planes de Consulta.

Para obtener más información sobre las operaciones de agregación analizadas en esta guía, consulta la siguiente documentación de la API:

Volver

Kerberos (GSSAPI)

En esta página