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

Transforma tus datos con agregación

En esta guía, puedes aprender cómo usar el controlador C++ para realizar operaciones de agregación.

Las operaciones de agregación procesan datos en tus colecciones de MongoDB y devuelven resultados calculados. El marco de agregación de MongoDB, que forma parte de la API de query, está basado en el concepto de pipelines de procesamiento de datos. Los documentos ingresan a un pipeline que contiene una o más etapas, y este pipeline transforma los documentos en un resultado agregado.

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++11 en el menú desplegable Select your language en la esquina superior derecha de la página.

Una operación de agregación se asemeja 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.

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:

  • Ejecutar operaciones de búsqueda

  • Renombrar campos

  • Calcular campos

  • Resumir datos

  • Agrupar valores

Ten en cuenta las siguientes limitaciones al usar operaciones de agregación:

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

  • Las etapas del pipeline tienen un límite de memoria de 100 megabytes por defecto. Puedes superar este límite estableciendo el allow_disk_use campo de una instancia de mongocxx::options::aggregate a true.

Importante

Excepción $graphLookup

La etapa $graphLookup tiene un límite estricto de memoria de 100 megabytes e ignora el campo allow_disk_use.

Nota

Los ejemplos de 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 datasets de muestra, consulta la guía Primeros Pasos con Atlas.

Para realizar una agregación, pasa una instancia de mongocxx::pipeline que contenga las etapas de agregación al método collection.aggregate().

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

  • $match etapa para filtrar documentos en los que el campo cuisine contenga el valor "Bakery"

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

mongocxx::pipeline stages;
stages.match(make_document(kvp("cuisine", "Bakery")))
.group(make_document(kvp("_id", "$borough"), kvp("count", make_document(kvp("$sum", 1)))));
auto cursor = collection.aggregate(stages);
for (auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : "Brooklyn", "count" : 173 }
{ "_id" : "Queens", "count" : 204 }
{ "_id" : "Bronx", "count" : 71 }
{ "_id" : "Staten Island", "count" : 20 }
{ "_id" : "Missing", "count" : 2 }
{ "_id" : "Manhattan", "count" : 221 }

Para ver información sobre cómo MongoDB ejecuta tu operación, puedes instruir al planificador de consultas de MongoDB para que la explique. 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 que MongoDB puede completar una operación. Cuando instruyes a MongoDB para que explique una operación, devuelve tanto el plan que MongoDB ejecutó como cualquier plan de ejecución rechazado.

Para explicar una operación de agregación, ejecutá el comando de base de datos explain especificando el comando en un documento BSON y pasándolo como argumento al método run_command().

El siguiente ejemplo indica a MongoDB que explique la operación de agregación del Ejemplo de agregación:anterior

mongocxx::pipeline stages;
stages.match(make_document(kvp("cuisine", "Bakery")))
.group(make_document(kvp("_id", "$borough"), kvp("count", make_document(kvp("$sum", 1)))));
auto command = make_document(
kvp("explain", make_document(
kvp("aggregate", "restaurants"),
kvp("pipeline", stages.view_array()),
kvp("cursor", make_document()))));
auto result = db.run_command(command.view());
std::cout << bsoncxx::to_json(result) << std::endl;
{ "explainVersion" : "2", "queryPlanner" : { "namespace" : "sample_restaurants.restaurants",
"indexFilterSet" : false, "parsedQuery" : { "cuisine" : { "$eq" : "Bakery" } }, "queryHash":
"...", "planCacheKey" : "...", "optimizedPipeline" : true, "maxIndexedOrSolutionsReached":
false, "maxIndexedAndSolutionsReached" : false, "maxScansToExplodeReached" : false,
"winningPlan" : { ... }
... }

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 la creación de un pipeline de agregación y ver ejemplos, consulta Pipeline de agregación.

Para obtener más información sobre cómo explicar las operaciones de MongoDB, consulta Resultado de explicación y Planes de consultas.

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

Volver

Índices de búsqueda de MongoDB

En esta página