Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Transforme seus dados com agregação

Neste guia, você pode aprender como usar o driver C++ 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:

  • Executar 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 podem violar o limite de tamanho do 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 configurando o campo allow_disk_use de uma instância do mongocxx::options::aggregate para true.

Importante

exceção $graphLookup

O estágio $graphLookup tem um limite de memória rigoroso de 100 megabytes e ignora o campo allow_disk_use .

Observação

Os exemplos neste guia usam a collection restaurants no banco de dados sample_restaurants dos conjuntos de banco 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 .

Para executar uma agregação, passe uma instância mongocxx::pipeline contendo os 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 que contém os seguintes estágios:

  • estágio $match para filtrar documentos nos quais o campo cuisine contém o valor "Bakery"

  • $group estágio para agrupar os documentos correspondentes pelo campo borough , acumulando uma contagem 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 visualizar informações sobre como o MongoDB executa sua operação, você pode instruir o planejador de query do 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 , execute o comando de banco de dados de dados explain especificando o comando em um documento BSON e passando-o como argumento para o método run_command() .

O exemplo a seguir instrui o MongoDB a explicar a operação de agregação do Exemplo de agregação 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 obter uma lista completa dos estágios de agregação, consulte Estágios de agregação no manual do MongoDB Server.

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

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

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