Docs Menu
Docs Home
/ /

Agregación

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 obtener resultados calculados. El marco de agregación de MongoDB, que forma parte de la API de consultas, se basa en el concepto de una canalización de procesamiento de datos. Los documentos entran en una canalización que contiene una o más etapas, y cada etapa los transforma para generar un resultado agregado final.

Una operación de agregación se puede comparar con una fábrica de automóviles. Una fábrica de automóviles cuenta con una línea de montaje que contiene estaciones de ensamblaje con herramientas especializadas para realizar tareas específicas, como taladros y soldadores. Las piezas en bruto entran en la fábrica y luego la línea de montaje las transforma y ensambla en un producto terminado.

La tubería de agregación es la línea de ensamblaje, las etapas de agregación son las estaciones de ensamblaje y las expresiones del operador son las herramientas especializadas.

Se pueden utilizar las operaciones de búsqueda para realizar las siguientes acciones:

  • Seleccione qué documentos desea devolver

  • Seleccione qué campos desea devolver

  • Ordenar los resultados

Puede utilizar operaciones de agregación para realizar las siguientes acciones:

  • Realizar operaciones de búsqueda

  • Cambiar el nombre de los campos

  • Calcular campos

  • Resumir datos

  • Valores del grupo

Se aplican las siguientes limitaciones al utilizar operaciones de agregación:

  • Los documentos devueltos no deben violar la Límite de tamaño del documento BSON de 16 megabytes.

  • Las etapas de la canalización tienen un límite de memoria de 100 megabytes por defecto. Puedes superar este límite configurando allowDiskUse opción a true.

Importante

Excepción $graphLookup

La etapa $graphLookup tiene un límite de memoria estricto de 100 megabytes e ignora la allowDiskUse opció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 MongoDB Primeros Pasos.

Tip

Tutoriales completos sobre agregación

Puede encontrar tutoriales que ofrecen explicaciones detalladas de las tareas de agregación más comunes en la sección "Tutoriales completos de canalización de agregación" del manual del servidor. Seleccione un tutorial y, a continuación, seleccione C desde el menú desplegable Select your language en la esquina superior derecha de la página.

Para realizar una agregación de los documentos de una colección, pase una estructura bson_t que represente las etapas del proceso 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 canalización de agregación que contiene las siguientes etapas:

  • Una etapa de $match para filtrar documentos en los que el valor del cuisine campo "Bakery" es.

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

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);
{ "_id" : "Queens", "count" : { "$numberInt" : "204" } }
{ "_id" : "Staten Island", "count" : { "$numberInt" : "20" } }
{ "_id" : "Missing", "count" : { "$numberInt" : "2" } }
{ "_id" : "Bronx", "count" : { "$numberInt" : "71" } }
{ "_id" : "Brooklyn", "count" : { "$numberInt" : "173" } }
{ "_id" : "Manhattan", "count" : { "$numberInt" : "221" } }

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 que se muestra 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);
{
"explainVersion": "2",
"queryPlanner": {
"namespace": "sample_restaurants.restaurants"
"indexFilterSet": false,
"parsedQuery": {
"cuisine": {"$eq": "Bakery"}
},
"queryHash": "865F14C3",
"planCacheKey": "0697561B",
"optimizedPipeline": true,
"maxIndexedOrSolutionsReached": false,
"maxIndexedAndSolutionsReached": false,
"maxScansToExplodeReached": false,
"winningPlan": { ... },
"rejectedPlans": []
...
}
...
}

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 una canalización de agregación y ver ejemplos, consulte Canalización de agregación en el manual de MongoDB Server.

Para obtener más información sobre cómo explicar las operaciones de MongoDB, consulte Explicar los planes de salida y consulta en el manual del servidor MongoDB.

Para obtener más información sobre cómo ejecutar operaciones de agregación con el controlador C, consulte la siguiente documentación de API:

Volver

Almacene archivos grandes

En esta página