Menu Docs
Página inicial do Docs
/ / /
PyMongo

Transforme seus dados com agregação

Nesta página

  • Visão geral
  • Aggregation versus operações de localização
  • Limitações
  • Exemplo de agregação
  • Explicar uma agregação
  • Informações adicionais
  • Manual do MongoDB Server
  • Tutoriais de agregação
  • Documentação da API

Neste guia, você pode aprender como usar o PyMongo para executar operações de agregação.

Operações de aggregation processam dados em suas collections MongoDB e retornam resultados calculados. A estrutura de agregação MongoDB, que faz parte da API de query, é modelada sobre o conceito de pipelines de processamento de dados. Os documentos entram em um pipeline que contém um ou mais estágios, e esse pipeline transforma os documentos em um resultado agregado.

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.

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

Lembre-se das seguintes limitações 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 esse limite usando o argumento de palavra-chave allowDiskUse do método aggregate() .

Importante

exceção $graphLookup

O estágio $graphLookup tem um limite de memória rigoroso de 100 megabytes e ignora o parâmetro allowDiskUse .

Observação

Este exemplo utiliza a collection sample_restaurants.restaurants dos conjuntos de dados de amostra do Atlas. Para saber como criar um cluster gratuito do MongoDB Atlas e carregar os conjuntos de dados de amostra, consulte Introdução ao PyMongo.

Para executar uma agregação, passe uma lista de estágios de agregação para o método collection.aggregate().

O exemplo de código a seguir produz uma contagem do número de padarias em cada bairro de Nova York. Para fazer isso, ele usa um pipeline de agregação com os seguintes estágios:

  • Um estágio $match para filtrar os documentos cujo campo cuisine contém o valor "Bakery".

  • Um estágio $group para agrupar os documentos correspondentes pelo campo borough , acumulando uma contagem de documentos para cada valor distinto.

# Define an aggregation pipeline with a match stage and a group stage
pipeline = [
{ "$match": { "cuisine": "Bakery" } },
{ "$group": { "_id": "$borough", "count": { "$sum": 1 } } }
]
# Execute the aggregation
aggCursor = collection.aggregate(pipeline)
# Print the aggregated results
for document in aggCursor:
print(document)

O exemplo de código anterior produz saída semelhante ao seguinte:

{'_id': 'Bronx', 'count': 71}
{'_id': 'Brooklyn', 'count': 173}
{'_id': 'Missing', 'count': 2}
{'_id': 'Manhattan', 'count': 221}
{'_id': 'Queens', 'count': 204}
{'_id': 'Staten Island', 'count': 20}

Para visualizar informações sobre como o MongoDB executa sua operação, você pode instruir o MongoDB a explicá -la. 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 executado pelo MongoDB e quaisquer planos de execução rejeitados.

Para explicar uma operação de agregação , você pode usar a biblioteca PyMongoExplain ou um comando de banco de dados de dados. Selecione a guia correspondente abaixo para ver um exemplo de cada método.

Use pip para instalar a biblioteca pymongoexplain , como mostrado no seguinte exemplo:

python3 -m pip install pymongoexplain

O exemplo de código a seguir executa o exemplo de agregação anterior e imprime a explicação retornada pelo MongoDB:

# Define an aggregation pipeline with a match stage and a group stage
pipeline = [
{ "$match": { "cuisine": "Bakery" } },
{ "$group": { "_id": "$borough", "count": { "$sum": 1 } } }
]
# Execute the operation and print the explanation
result = ExplainableCollection(collection).aggregate(pipeline)
print(result)
...
'winningPlan': {'queryPlan': {'stage': 'GROUP',
'planNodeId': 3,
'inputStage': {'stage': 'COLLSCAN',
'planNodeId': 1,
'filter': {'cuisine': {'$eq': 'Bakery'}},
'direction': 'forward'}},
...

O exemplo de código a seguir executa o exemplo de agregação anterior e imprime a explicação retornada pelo MongoDB:

# Define an aggregation pipeline with a match stage and a group stage
pipeline = [
{ $match: { cuisine: "Bakery" } },
{ $group: { _id: "$borough", count: { $sum: 1 } } }
]
# Execute the operation and print the explanation
result = database.command("aggregate", "collection", pipeline=pipeline, explain=True)
print(result)
...
'command': {'aggregate': 'collection',
'pipeline': [{'$match': {'cuisine': 'Bakery'}},
{'$group': {'_id': '$borough',
'count': {'$sum': 1}}}],
'explain': True,
...

Dica

Você pode usar o módulo pprint do Python para facilitar a leitura dos resultados da explicação:

import pprint
...
pprint.pp(result)

Para ver uma lista completa de operadores de expressão, consulte Operadores de aggregation.

Para saber mais sobre como montar um aggregation pipeline e ver exemplos, consulte Aggregation Pipeline.

Para saber mais sobre como criar estágios de pipeline, consulte Estágios de agregação.

Para saber mais sobre como explicar as operações do MongoDB, consulte Explicar planos de saída e query.

Para exibir explicações passo a passo de tarefas comuns de aggregation, consulte Tutoriais de aggregation.

Para obter mais informações sobre como executar operações de agregação com o PyMongo, consulte a seguinte documentação da API:

Voltar

Índices aglomerados