Menu Docs
Página inicial do Docs
/ / /
Driver C

Transforme seus dados com agregação

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

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

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 configurando a opção allowDiskUse para true.

Importante

exceção $graphLookup

O estágio $graphLookup tem um limite de memória rigoroso de 100 megabytes e ignora a opção allowDiskUse .

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 .

Dica

Tutoriais completos de agregação

Você pode encontrar tutoriais que fornecem explicações detalhadas de tarefas comuns de agregação na seção Tutoriais completos do aggregation pipeline do manual do servidor. Selecione um tutorial e escolha C no Select your language menu suspenso no canto superior direito da página.

Para executar uma agregação nos documentos em uma coleção, passe uma estrutura bson_t que represente os estágios de pipeline para a função mongoc_collection_aggregate().

Este exemplo gera uma contagem do número de Padarias em cada bairro da cidade de Nova York. O código abaixo 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.

const bson_t *doc;
bson_t *pipeline = BCON_NEW ("pipeline",
"[",
"{", "$match", "{", "cuisine", BCON_UTF8 ("Bakery"), "}", "}",
"{", "$group", "{",
"_id", BCON_UTF8 ("$borough"), "count", "{", "$sum", BCON_INT32 (1), "}", "}",
"}",
"]");
mongoc_cursor_t *results =
mongoc_collection_aggregate (collection, MONGOC_QUERY_NONE, pipeline, NULL, NULL);
bson_error_t error;
if (mongoc_cursor_error (results, &error))
{
fprintf (stderr, "Aggregate failed: %s\n", error.message);
} else {
while (mongoc_cursor_next (results, &doc)) {
char *str = bson_as_canonical_extended_json (doc, NULL);
printf ("%s\n", str);
bson_free (str);
}
}
bson_destroy (pipeline);
mongoc_cursor_destroy (results);
{ "_id" : "Queens", "count" : { "$numberInt" : "204" } }
{ "_id" : "Staten Island", "count" : { "$numberInt" : "20" } }
{ "_id" : "Missing", "count" : { "$numberInt" : "2" } }
{ "_id" : "Bronx", "count" : { "$numberInt" : "71" } }
{ "_id" : "Brooklyn", "count" : { "$numberInt" : "173" } }
{ "_id" : "Manhattan", "count" : { "$numberInt" : "221" } }

Para visualizar informações sobre como o MongoDB executa sua operação, você pode executar a operaçã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, mas utiliza a função mongoc_client_command_simple() para explicar os detalhes da operação:

bson_t reply;
bson_error_t error;
bson_t *command = BCON_NEW (
"aggregate", BCON_UTF8 ("restaurants"),
"explain", BCON_BOOL(true),
"pipeline",
"[",
"{", "$match", "{", "cuisine", BCON_UTF8("Bakery"), "}", "}",
"{", "$group", "{",
"_id", BCON_UTF8("$borough"), "count", "{", "$sum", BCON_INT32(1), "}", "}",
"}",
"]");
if (mongoc_client_command_simple (client, "sample_restaurants", command, NULL, &reply, &error)) {
char *str = bson_as_canonical_extended_json (&reply, NULL);
printf ("%s\n", str);
bson_free (str);
} else {
fprintf (stderr, "Command failed: %s\n", error.message);
}
bson_destroy (command);
bson_destroy (&reply);
{
"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": { ... },
"rejectedPlans": []
...
}
...
}

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 .

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

Voltar

Autenticação empresarial

Nesta página