Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Transforma tus datos con agregación

En esta guía puedes aprender a utilizar el driver Ruby 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 comunes de agregación en la sección Tutoriales completos de canalización de agregación del manual del servidor. Selecciona un tutorial y luego elige Ruby 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.

La siguiente tabla muestra las diferentes tareas que pueden realizar las operaciones de búsqueda y las compara con lo que las operaciones de agregación pueden realizar. El marco de agregación proporciona funcionalidades ampliadas que permiten transformar y manipular tus datos.

Operaciones de búsqueda
Operaciones de agregación

Seleccione los documentos que desea devolver

Seleccione los campos que desea devolver

Ordene los resultados Limite los resultados Conteste los resultados

Seleccione ciertos documentos para devolver
Seleccione qué campos devolver
Ordene los resultados
Limite los resultados
Cuente los resultados
Cambie el nombre de los campos
Calcule nuevos campos
Resuma los datos
Conecte y combine conjuntos de datos

Considera las siguientes limitaciones al realizar operaciones de agregación:

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

  • Las etapas de la pipeline tienen un límite de memoria de 100 megabytes por defecto. Puede superar este límite pasando un valor de true al método allow_disk_use y encadenando el método a aggregate.

  • La $graphLookup operadora tiene un límite estricto de memoria de 100 megabytes y omite el valor pasado al método allow_disk_use.

Nota

Datos de muestra

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, define cada etapa de la pipeline como un hash de Ruby y luego pasa el pipeline de operaciones al método 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 con las siguientes etapas:

  • Una etapa $match para filtrar documentos cuyo campo cuisine contenga el valor "Bakery".

  • Una etapa $group para agrupar los documentos que coinciden por el campo borough, acumulando un recuento de documentos para cada valor distinto.

database = client.use('sample_restaurants')
restaurants_collection = database[:restaurants]
pipeline = [
{ '$match' => { 'cuisine' => 'Bakery' } },
{ '$group' => {
'_id' => '$borough',
'count' => { '$sum' => 1 }
}
}
]
aggregation = restaurants_collection.aggregate(pipeline)
aggregation.each do |doc|
puts doc
end
{"_id"=>"Bronx", "count"=>71}
{"_id"=>"Manhattan", "count"=>221}
{"_id"=>"Queens", "count"=>204}
{"_id"=>"Missing", "count"=>2}
{"_id"=>"Staten Island", "count"=>20}
{"_id"=>"Brooklyn", "count"=>173}

Para ver información sobre cómo MongoDB ejecuta tu operación, puedes instruir al planificador de query de MongoDB para que lo explique. Cuando MongoDB explica una operación, devuelve planes de ejecución y estadísticas de rendimiento. Un plan de ejecución es una posible manera en la que MongoDB puede completar una operación. Cuando indicas a MongoDB que explique una operación, por defecto devuelve tanto el plan ejecutado por MongoDB como cualquier plan de ejecución rechazado.

Para explicar una operación de agregación, conecta el método explain al método aggregate.

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

explanation = restaurants_collection.aggregate(pipeline).explain()
puts explanation
{"explainVersion"=>"2", "queryPlanner"=>{"namespace"=>"sample_restaurants.restaurants",
"parsedQuery"=>{"cuisine"=> {"$eq"=> "Bakery"}}, "indexFilterSet"=>false,
"planCacheKey"=>"6104204B", "optimizedPipeline"=>true, "maxIndexedOrSolutionsReached"=>false,
"maxIndexedAndSolutionsReached"=>false, "maxScansToExplodeReached"=>false,
"prunedSimilarIndexes"=>false, "winningPlan"=>{"isCached"=>false,
"queryPlan"=>{"stage"=>"GROUP", "planNodeId"=>3,
"inputStage"=>{"stage"=>"COLLSCAN", "planNodeId"=>1, "filter"=>{},
"direction"=>"forward"}},...}

Nota

Solo disponible para colecciones con un índice de búsqueda de MongoDB

Este operador de la pipeline de agregación solo está disponible para las colecciones que tienen un índice de búsqueda de MongoDB.

Para especificar una búsqueda de texto completo de uno o más campos, puedes usar MongoDB Search para crear una etapa de pipeline $search.

Este ejemplo crea etapas de pipeline para realizar las siguientes acciones:

  • Busca el término "Salt"en el campo name

  • Proyectar solo los valores _id y name de los documentos coincidentes

Importante

Para ejecutar el siguiente ejemplo, debes crear un índice de búsqueda de MongoDB en la colección restaurants que cubra el campo name. Luego, sustituya el marcador de posición "<your_search_index_name>" con el nombre del índice. Para aprender a crear un índice de búsqueda de MongoDB, consulta la guía MongoDB Search y MongoDB Vector Search Indexes.

search_pipeline = [
{
'$search' => {
'index' => '<your_search_index_name>',
'text' => {
'query' => 'Salt',
'path' => 'name'
},
}
},
{
'$project' => {
'_id' => 1,
'name' => 1
}
}
]
results = collection.aggregate(search_pipeline)
results.each do |document|
puts document
end
{"_id"=> {"$oid"=> "..."}, "name"=> "Fresh Salt"}
{"_id"=> {"$oid"=> "..."}, "name"=> "Salt & Pepper"}
{"_id"=> {"$oid"=> "..."}, "name"=> "Salt + Charcoal"}
{"_id"=> {"$oid"=> "..."}, "name"=> "A Salt & Battery"}
{"_id"=> {"$oid"=> "..."}, "name"=> "Salt And Fat"}
{"_id"=> {"$oid"=> "..."}, "name"=> "Salt And Pepper Diner"}

Para aprender más sobre los temas tratados en esta guía, consulta las siguientes páginas del manual del servidor MongoDB:

Para obtener más información sobre los métodos de agregación del driver de Ruby, consulta, consulta la documentación de la API para Agregación