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

Operaciones de 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.

Para obtener más información sobre las etapas de agregación admitidas por el driver .NET/C#, consulte Etapas de agregación.

Tip

Tutoriales completos sobre agregación

Puedes encontrar tutoriales que proporcionan explicaciones detalladas de tareas de agregación comunes en el Tutoriales completos del pipeline de agregación en el manual del servidor. Selecciona un tutorial y luego elige C# en el menú desplegable Select your language en la esquina superior derecha de la página.

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

Considera las siguientes 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().

Si utiliza una expresión LINQ o de generador que no está disponible en la API Query, puede recibir un mensaje de excepción Unsupported filter ... o Expression not supported .... Puede que una expresión no esté disponible en los siguientes casos:

  1. Estás intentando utilizar una funcionalidad de .NET/C# que no tiene una representación equivalente en MongoDB. Por ejemplo, .NET/C# y MongoDB tienen diferentes semánticas en torno a intercalaciones.

  2. El driver no soporta una transformación específica de la expresión LINQ o del generador en la API de query. Esto puede ocurrir porque la query API translation proporcionada no tiene traducción de la API de query o porque una funcionalidad aún no ha sido implementada en el driver.

Si recibes una de estas excepciones, intenta lo siguiente:

  1. Utilice el MongoDB C# Analyzer para analizar sus expresiones.

  2. Simplifica tu query siempre que sea posible.

  3. Proporcione una consulta como un objeto BsonDocument o una string JSON. Todas las clases de definición, como FilterDefinition, ProjectionDefinition, y PipelineDefinition, admiten la conversión implícita de objetos BsonDocument o cadenas JSON. Por ejemplo, los siguientes filtros son equivalentes cuando se utilizan en una query o agregación:

    FilterDefinition<Entity> typedFilter = Builders<Entity>.Filter.Eq(e => e.A, 1);
    FilterDefinition<Entity> bsonFilter = new BsonDocument {{ "a", 1 }};
    FilterDefinition<Entity> jsonFilter = "{ a : 1 }";

Puedes combinar BsonDocument objetos, cadenas JSON y POCOs en la misma query, como se muestra en el siguiente ejemplo:

FilterDefinition<Entity> filter = Builders<Entity>.Filter
.And(Builders<Entity>.Filter
.Eq(e => e.A, 1), BsonDocument
.Parse("{ b : 2 }"));

Nota

Si utilizas un objeto BsonDocument o una string JSON, los nombres de tus campos deben coincidir con los nombres que distingue entre mayúsculas y minúsculas almacenados por el servidor. Por ejemplo, cuando haga referencia al campo _id, debe referirse a él utilizando el nombre del campo _id.

Dado que la API de consulta no reconoce asignaciones manuales de clases, atributos de serialización BSON ni convenciones de serialización, no se pueden usar estos mecanismos para cambiar los nombres de los campos. Por ejemplo, si un documento contiene un campo llamado FirstName anotado [BsonElement("first_name")] con, debe referirse a él como first_name en o en las BsonDocument definiciones de cadenas JSON.

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

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

Volver

Tutorial: Crear una API RESTful

En esta página