Overview
En esta guía, puedes aprender cómo usar el driver de C para realizar operaciones de agregación.
Puede usar operaciones de agregación para procesar datos en sus colecciones de MongoDB y devolver resultados calculados. El marco de agregación de MongoDB, que forma parte de la API de query, está basado en el concepto de una pipeline de procesamiento de datos. Los documentos ingresan en una pipeline que contiene una o más etapas, y cada etapa transforma los documentos para producir un resultado final agregado.
Puedes pensar en una operación de agregación como similar a una fábrica de automóviles. Una fábrica de automóviles tiene una línea de ensamblaje, que contiene estaciones de ensamblaje con herramientas especializadas para realizar tareas específicas, como taladros y soldadores. Las piezas en bruto ingresan a la fábrica y luego la línea de montaje las transforma y ensambla en un producto terminado.
La pipeline de agregación es la cadena de ensamblaje, las etapas de agregación son las estaciones de ensamblaje y las expresiones de operadores son las herramientas especializadas.
Comparar las operaciones de agregación y búsqueda
Se pueden utilizar las operaciones de búsqueda para realizar las siguientes acciones:
Seleccione qué documentos devolver
Seleccione qué campos devolver
Ordenar los resultados
Puedes utilizar operaciones de agregación para realizar las siguientes acciones:
Realizar operaciones de búsqueda
Renombrar campos
Calcular campos
Resumir datos
Agrupar valores
Limitaciones
Las siguientes limitaciones se aplican al utilizar operaciones de agregación:
Returned documents must not violate the BSON document size limit of 16 megabytes.
Las etapas del pipeline tienen un límite de memoria de 100 megabytes por defecto. Puede superar este límite configurando la opción
allowDiskUseentrue.
Importante
Excepción $graphLookup
La etapa $graphLookup tiene un límite de memoria estricto de 100 megabytes e ignora la allowDiskUse opción.
Ejemplos de agregación
Los ejemplos en esta guía utilizan la colección restaurants en la base de datos sample_restaurants de los conjuntos de datos de muestra de Atlas. Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulta la guía de Introducción a MongoDB.
Tip
Tutoriales completos sobre agregación
You can find tutorials that provide detailed explanations of common aggregation tasks in the Complete Aggregation Pipeline Tutorials section of the Server manual. Select a tutorial, and then pick C from the Select your language drop-down menu in the upper-right corner of the page.
Compilar y ejecutar un pipeline de agregación
Para realizar una agregación en los documentos de una colección, pasa una estructura bson_t que represente las etapas del pipeline a la función mongoc_collection_aggregate().
Este ejemplo genera un recuento del número de panaderías en cada distrito de la ciudad de Nueva York. El siguiente código crea una pipeline de agregación que contiene las siguientes etapas:
A $match stage to filter for documents in which the value of the
cuisinefield is"Bakery".A $group stage to group the matching documents by the
boroughfield, producing a count of documents for each distinct value of that field.
const bson_t *doc; bson_t *pipeline = BCON_NEW("pipeline", "[", "{", "$match", "{", "cuisine", BCON_UTF8("Bakery"), "}", "}", "{", "$group", "{", "_id", BCON_UTF8("$borough"), "count", "{", "$sum", BCON_INT32(1), "}", "}", "}", "]"); mongoc_cursor_t *results = mongoc_collection_aggregate(collection, MONGOC_QUERY_NONE, pipeline, NULL, NULL); bson_error_t error; if (mongoc_cursor_error(results, &error)) { fprintf(stderr, "Aggregate failed: %s\n", error.message); } else { while (mongoc_cursor_next(results, &doc)) { char *str = bson_as_canonical_extended_json(doc, NULL); printf("%s\n", str); bson_free(str); } } bson_destroy(pipeline); mongoc_cursor_destroy(results);
Explica una agregación
Para ver información sobre cómo MongoDB ejecuta su operación, puede ejecutar la operación explain en su pipeline. Cuando MongoDB explica una operación, devuelve planes de ejecución y estadísticas de rendimiento. Un plan de ejecución es una forma potencial en la que MongoDB puede completar una operación. Cuando le indicas a MongoDB que explique una operación, devuelve tanto el plan que MongoDB seleccionó para la operación, como cualquier plan de ejecución rechazado.
El siguiente ejemplo de código ejecuta la misma agregación mostrada en la sección anterior, pero utiliza la función mongoc_client_command_simple() para explicar los detalles de la operación:
bson_t reply; bson_error_t error; bson_t *command = BCON_NEW( "aggregate", BCON_UTF8("restaurants"), "explain", BCON_BOOL(true), "pipeline", "[", "{", "$match", "{", "cuisine", BCON_UTF8("Bakery"), "}", "}", "{", "$group", "{", "_id", BCON_UTF8("$borough"), "count", "{", "$sum", BCON_INT32(1), "}", "}", "}", "]"); if (mongoc_client_command_simple(client, "sample_restaurants", command, NULL, &reply, &error)) { char *str = bson_as_canonical_extended_json(&reply, NULL); printf("%s\n", str); bson_free(str); } else { fprintf(stderr, "Command failed: %s\n", error.message); } bson_destroy(command); bson_destroy(&reply);
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 aprender sobre cómo ensamblar una pipeline de agregación y ver ejemplos, consulte Pipeline de agregación en el manual del MongoDB Server.
Para aprender más sobre cómo explicar las operaciones de MongoDB, consulta Salida de explicación y Planes de consultas en el manual de MongoDB Server.
Documentación de la API
Para obtener más información sobre cómo ejecutar operaciones de agregación con el C driver, consulte la siguiente documentación de la API: