Menu Docs
Página inicial do Docs
/ / /
C#/.NET
/

Agregação

Nesta página

  • Visão geral
  • Analogia
  • Comparar agregação e encontrar operações
  • Limitações do servidor
  • Exemplo de agregação
  • Abordagem LINQ
  • Abordagem dos construtores
  • Abordagem do BsonDocument
  • Informações adicionais
  • Manual do MongoDB Server
  • Documentação da API

Neste guia, você pode aprender como usar o driver MongoDB .NET/C# para realizar operações de agregação.

Operações de agregação processam dados em suas coleções MongoDB e retornam resultados calculados. A estrutura de agregação MongoDB é modelada sobre o conceito de pipelines de processamento de dados. Os documentos entram em um pipeline composto por um ou mais estágios, e esse pipeline transforma os documentos em um resultado agregado.

As operações de agregação funcionam de forma semelhante às fábricas de automóveis com linhas de montagem. As linhas de montagem têm estações com ferramentas especializadas para executar tarefas específicas. Por exemplo, ao construir um carro, a linha de montagem começa com o estrutura. Em seguida, à medida que a estrutura do carro se move pela linha de montagem, cada estação monta uma peça separada. O resultado é um produto final transformado, o carro acabado.

A linha de montagem representa o aggregation pipeline, as estações individuais representam os estágios de aggregation, as ferramentas especializadas representam os operadores de expressão, e o produto finalizado representa o resultado agregado.

A tabela a seguir lista as diferentes tarefas que você pode executar com operações de localização, em comparação com o que você pode obter com operações de agregação. A estrutura de agregação fornece funcionalidade expandida que permite transformar e manipular seus dados.

Encontrar operações
Operações de agregação
Select certain documents to return
Select which fields to return
Sort the results
Limit the results
Count the results
Select certain documents to return
Select which fields to return
Sort the results
Limit the results
Count the results
Group the results
Rename fields
Compute new fields
Summarize data
Connect and merge data sets

Considere as seguintes limitações ao realizar operações de agregação:

  • Os documentos retornados não devem 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. Se necessário, você pode exceder esse limite definindo a propriedadeAllowDiskUse do objeto AggregateOptions que você passa para o método Aggregate() .

  • O estágio $graphLookup tem um limite estrito de memória de 100 megabytes e ignora a propriedade AllowDiskUse.

Para executar uma agregação, passe uma lista de estágios de agregação para o método IMongoCollection<TDocument>.Aggregate().

Observação

Este exemplo utiliza a coleção sample_restaurants.restaurants dos conjuntos de dados de amostra do Atlas. Para saber como criar um cluster do MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte Início rápido.

O exemplo de código a seguir produz uma contagem do número de padarias em cada distrito da cidade de Nova York. Para fazer isso, ele usa um pipeline de agregação que contém 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 desse campo.

As seções a seguir implementam esse exemplo usando as abordagens LINQ, Builders e BSONDocument para criar e combinar os estágios de agregação usados no pipeline de exemplo.

// Defines a queryable collection object as a prerequisite to using LINQ
var queryableCollection = collection.AsQueryable();
// Defines the query with $match and $group stages
var query = queryableCollection
.Where(r => r.Cuisine == "Bakery")
.GroupBy(r => r.Borough)
.Select(g => new { _id = g.Key, Count = g.Count() });
// Executes the query and prints the aggregated results
foreach (var result in query.ToList())
{
Console.WriteLine(result);
}

Para saber mais sobre como usar o LINQ para construir pipelines de agregação, consulte o guia do LINQ.

// Defines the $match aggregation stage
var matchFilter = Builders<Restaurant>.Filter.Eq(r => r.Cuisine, "Bakery");
// Defines the aggregation pipeline with the $match and $group aggregation stages
var pipeline = new EmptyPipelineDefinition<Restaurant>()
.Match(matchFilter)
.Group(r => r.Borough,
g => new
{
_id = g.Key,
Count = g.Count()
}
);
// Executes the aggregation pipeline
var results = collection.Aggregate(pipeline).ToList();
// Prints the aggregated results
foreach (var result in results)
{
Console.WriteLine(result);
}

Para saber mais sobre como usar construtores para construir pipelines de agregação, consulte a seção Criar um pipeline de agregação do guia Operações com construtores.

// Defines the $match and $group aggregation stages
var matchStage = new BsonDocument
{
{
"$match",
new BsonDocument
{
{ "cuisine", "Bakery" }
}
}
};
var groupStage = new BsonDocument
{
{
"$group",
new BsonDocument
{
{ "_id", "$borough" },
{ "count", new BsonDocument("$sum", 1) }
}
}
};
// Executes the aggregation pipeline
var pipeline = new[] { matchStage, groupStage };
var results = collection.Aggregate<BsonDocument>(pipeline).ToList();
// Prints the aggregated results
foreach (BsonDocument result in results)
{
Console.WriteLine(result);
}

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

Para saber mais sobre como criar um pipeline de agregação e ver exemplos, consulte Pipeline de agregação.

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

Para saber como explicar as operações de agregação do MongoDB, consulte Explicar resultados e Planos de query.

Para obter mais informações sobre as operações de agregação abordadas neste guia, consulte a seguinte documentação da API:

Voltar

Mecanismos de autenticação empresarial