Transforme seus dados com agregação
Nesta página
Visão geral
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.
Aggregation versus operações de localização
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
Limitações
Lembre-se das seguintes limitações ao usar operações de agregação:
Os documentos devolvidos não podem violar olimite 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 domongocxx::options::aggregate
paratrue
.
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
.
Exemplo de agregação
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 }
Explicar uma agregação
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" : { ... } ... }
Informações adicionais
Manual do MongoDB Server
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.
Documentação da API
Para obter mais informações sobre como executar operações de agregação com o driver C++ , consulte a seguinte documentação da API: