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

Transforme seus dados com agregação

Nesta página

  • Visão geral
  • Comparar agregação e encontrar operações
  • Limitações
  • Exemplo de agregação
  • Criar e Executar um Pipeline de Agregação
  • Explicar uma agregação
  • Informações adicionais
  • Documentação da API

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 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 .

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