Overview
En esta guía, puede 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 controlador .NET/C#, consulte Etapas de agregación.
Tip
Tutoriales completos sobre agregación
Puede encontrar tutoriales que brindan explicaciones detalladas de tareas de agregación comunes en Sección completa de tutoriales decanalización de agregación del manual del servidor. Seleccione un tutorial y luego seleccione C# desde el menú desplegable Select your language en la esquina superior derecha de la página.
Analogía
Las operaciones de agregación funcionan de forma similar a las fábricas de automóviles con líneas de montaje. Estas líneas cuentan con estaciones con herramientas especializadas para realizar tareas específicas. Por ejemplo, al fabricar un automóvil, la línea de montaje comienza con el chasis. A medida que este avanza por la línea, cada estación ensambla una pieza independiente. El resultado es un producto final transformado: el automóvil terminado.
La línea de ensamblaje representa la cadena de agregación, las estaciones individuales representan las etapas de agregación, las herramientas especializadas representan los operadores de expresión y el producto terminado representa el resultado agregado.
Comparar las operaciones de agregación y búsqueda
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 |
Limitaciones del servidor
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
AggregateOptionsobjeto que pasa al métodoAggregate().
Solución de problemas
Unsupported filter or Expression not supported
Si usa una expresión LINQ o de generador que no está disponible en la API de consulta, podría recibir un mensaje de excepción Unsupported filter ... o Expression not
supported .... Una expresión podría no estar disponible en los siguientes casos:
Intenta usar una función de .NET/C# que no tiene una representación equivalente en MongoDB. Por ejemplo, .NET/C# y MongoDB tienen una semántica diferente en cuanto a las intercalaciones.
El controlador no admite una transformación específica de la expresión LINQ o del generador a la API de consulta. Esto puede deberse a que la consulta proporcionada no tiene traducción de la API de consulta o a que no se ha implementado una función en el controlador.
Si recibe una de estas excepciones, intente los siguientes pasos:
Utilice el MongoDB C# Analyzer para analizar sus expresiones.
Simplifique su consulta siempre que sea posible.
Proporcione una consulta como un objeto
BsonDocumento una cadena JSON. Todas las clases de definición, comoFilterDefinition,ProjectionDefinitionyPipelineDefinition, admiten la conversión implícita desde objetosBsonDocumento cadenas JSON. Por ejemplo, los siguientes filtros son equivalentes cuando se usan en una consulta 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 }";
Puede combinar objetos BsonDocument, cadenas JSON y POCO en la misma consulta, 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 usa un objeto BsonDocument o una cadena JSON, los nombres de los campos deben coincidir con los nombres que distinguen entre mayúsculas y minúsculas almacenados por el servidor. Por ejemplo, al hacer referencia al campo _id, debe usar el nombre de 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.
Información Adicional
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 explicar las operaciones de agregación de MongoDB, consulte Explicar resultados y planes de consulta.