Overview
En esta guía, puede aprender a utilizar el controlador Kotlin Sync 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.
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 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
Limitaciones
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 usando el
allowDiskUse()método de la claseAggregateIterable.
Importante
Excepción $graphLookup
La etapa $graphLookup tiene un límite de memoria estricto de 100 megabytes e ignora la allowDiskUse opción.
Ejemplo de agregación
Los ejemplos de esta sección utilizan la restaurants colección de la base de datos de los sample_restaurants conjuntos de datos de ejemplo de Atlas. Para aprender a crear una implementación gratuita de MongoDB y cargar los conjuntos de datos de ejemplo, consulte la guía de introducción a MongoDB.
La siguiente clase de datos de Kotlin modela los documentos de esta colección:
data class Restaurant( val name: String, val cuisine: String, val borough: String )
Construir y ejecutar una canalización de agregación
Para realizar una agregación de los documentos de una colección, pase una lista de etapas de agregación al método 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
cuisinecampo"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.
Nota
El siguiente ejemplo utiliza el patrón constructores para implementar las etapas de una canalización de agregación. Para obtener más información sobre cómo usar el patrón constructores, consulte Usar constructores con clases de datos
val pipeline = listOf( Aggregates.match(Filters.eq(Restaurant::cuisine.name, "Bakery")), Aggregates.group("\$borough", Accumulators.sum("count", 1)) ) val results = collection.aggregate<Document>(pipeline) results.forEach { result -> println(result) }
Document{{_id=Bronx, count=71}} Document{{_id=Manhattan, count=221}} Document{{_id=Brooklyn, count=173}} Document{{_id=Queens, count=204}} Document{{_id=Staten Island, count=20}} Document{{_id=Missing, count=2}}
Tip
Al especificar una clave de grupo para la etapa de agregación $group, asegúrese de escapar cualquier carácter $ utilizando el carácter \.
Explicar una agregación
Para ver información sobre cómo MongoDB ejecuta tu operación, puedes incluir la etapa de agregación $explain en el 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 y agrega la etapa $explain para generar los detalles de la operación:
print(collection.aggregate(pipeline).explain())
{ "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": { ... } ... } ... }
MongoDB búsqueda
Puede realizar una consulta de búsqueda de MongoDB creando y ejecutando una canalización de agregación que contenga una de las siguientes etapas de canalización:
$search$searchMeta
Para obtener más información sobre las etapas de la canalización de búsqueda de MongoDB,consulte Elegir la etapa de la canalización de agregación en la documentación de Atlas. Para ver ejemplos que utilizan el controlador de sincronización de Kotlin para crear etapas de búsqueda de la canalización de búsqueda de MongoDB, consulte la guía "Ejecutar una consulta de búsqueda de MongoDB".
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 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.
Documentación de la API
Para obtener más información sobre cómo ejecutar operaciones de agregación con el controlador Kotlin Sync, consulte la siguiente documentación de API: