Transforme seus dados com agregação
Nesta página
Visão geral
Neste guia, você pode aprender como usar o driver Kotlin Sync para executar operações de agregação.
Você pode usar operações de agregação para processar dados em suas coleções MongoDB e retornar resultados calculados. A estrutura de agregação MongoDB , que faz parte da API de query, é modelada sobre o conceito de um pipeline de processamento de dados. Os documentos entram em um pipeline que contém um ou mais estágios, e cada estágio transforma os documentos para gerar um resultado final agregado.
Você pode pensar em uma operação de agregação semelhante a uma fábrica de carros. Uma fábrica de automóveis tem uma linha de montagem, que contém estações de montagem com ferramentas especializadas para realizar trabalhos específicos, como furadeiras e soldadores. As peças brutas entram na fábrica e, em seguida, a linha de montagem transforma e as monta em um produto acabado.
O pipeline de agregação é a linha de montagem, estágios de agregação são as estações de montagem e expressões do operador são as ferramentas especializadas.
Comparar agregação e encontrar operações
Você pode usar encontrar operações para executar as seguintes ações:
Selecione quais documentos devolver
Selecione quais campos retornar
ordenar os resultados
Você pode usar operações de agregação para executar as seguintes ações:
Execute operações de localização
Renomear campos
Calcular campos
Resumir dados
Agrupar valores
Limitações
As seguintes limitações se aplicam ao usar operações de agregação :
Os documentos devolvidos não devem violar o limite de tamanho de documento BSON de 16 megabytes.
Os estágios do pipeline têm um limite de memória de 100 megabytes por padrão. Você pode exceder este limite utilizando o método
allowDiskUse()
da classeAggregateIterable
.
Importante
exceção $graphLookup
O estágio $graphLookup tem um limite de memória rigoroso de 100 megabytes e ignora a opção allowDiskUse
.
Exemplo de agregação
Os exemplos nesta seção utilizam a coleção do restaurants
no banco de dados de dados do sample_restaurants
a partir do conjunto de dados de amostra do Atlas. Para saber como criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte o guia Iniciar com Atlas .
A seguinte classe de dados Kotlin modela os documentos nesta coleção:
data class Restaurant( val name: String, val cuisine: String, val borough: String )
Criar e Executar um Pipeline de Agregação
Para executar uma agregação nos documentos em uma coleção, passe uma lista de estágios de agregação para o método aggregate()
.
Este exemplo gera uma contagem do número de Padarias em cada bairro da cidade de Nova York. O seguinte código cria um pipeline de agregação que contém os seguintes estágios:
Um estágio $match para filtrar os documentos em que o valor do campo
cuisine
é"Bakery"
.Um estágio $group para agrupar os documentos correspondentes pelo campo
borough
, produzindo uma contagem de documentos para cada valor distinto desse campo.
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}}
Dica
Ao especificar uma chave de grupo para o estágio de agregação $group
, certifique-se de trocar quaisquer $
caracteres usando o caractere \
.
Explicar uma agregação
Para visualizar informações sobre como o MongoDB executa sua operação, você pode incluir o estágio de agregação $explain
em seu pipeline. Quando o MongoDB explica uma operação, ele retorna planos de execução e estatísticas de desempenho. Um plano de execução é uma maneira em potencial de o MongoDB concluir uma operação. Quando você instrui o MongoDB a explicar uma operação, ele retorna o plano que o MongoDB selecionou para a operação e quaisquer planos de execução rejeitados.
O seguinte exemplo de código executa a mesma agregação mostrada na seção anterior e adiciona o estágio $explain
para produzir os detalhes da operação:
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": { ... } ... } ... }
Informações adicionais
Para ver uma lista completa de operadores de expressão , consulte Operadores de aggregation no manual do MongoDB Server .
Para saber mais sobre como montar um pipeline de agregação e ver exemplos, consulte Pipeline de agregação no manual do MongoDB Server .
Para saber mais sobre como criar estágios de pipeline, consulte Estágios de agregação no manual do MongoDB Server .
Para saber mais sobre como explicar as operações do MongoDB , consulte Explicar planos de saída e query no manual do MongoDB Server .
Documentação da API
Para obter mais informações sobre como executar operações de agregação com o driver Kotlin Sync, consulte a seguinte documentação da API: