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

Operações de agregação

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.

Para saber mais sobre os estágios de agregação suportados pelo driver .NET/C#, consulte Estágios de aggregation.

Dica

Tutoriais completos de agregação

You can find tutorials that provide detailed explanations of common aggregation tasks in the Complete Aggregation Pipeline Tutorials section of the Server manual. Select a tutorial, and then pick C# from the Select your language drop-down menu in the upper-right corner of the page.

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

Selecionar determinados documentos para retornar
Selecione quais campos retornar
Classificar os resultados
Limitar os resultados
Contar os resultados

Selecionar determinados documentos para retornar
Selecionar quais campos retornar
Classificar os resultados
Limitar os resultados
Contar os resultados
Agrupar os resultados
Renomear campos
Calcular novos campos
Resumir dados
Conectar e mesclar conjuntos de dados

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

  • Os documentos devolvidos 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 propriedade AllowDiskUse descrita na seção Modificar comportamento de agregação desta página.

You can modify the behavior of the Aggregate() method by passing an AggregateOptions object.

The following table describes some AggregateOptions properties:

Propriedade
Descrição

AllowDiskUse

Especifica se os estágios do pipeline podem gravar dados em arquivos temporários no disco para exceder o limite de memória de megabyte 100.

BatchSize

Define o número máximo de documentos que o servidor retorna em cada lote de cursor .

Collation

Define a agrupamento para utilizar para a operação.

Comment

Define um comentário sobre a operação para que seja mais identificável nos registros do profiler

Hint

Define o índice para o servidor utilizar para a operação.

MaxTime

Define o tempo de execução máximo no servidor para a operação.

To see a full list of available options, see AggregateOptions Properties in the API documentation.

The following example runs an aggregation pipeline and sets the BatchSize property to 5:

var options = new AggregateOptions { BatchSize = 5 };
var pipeline = new EmptyPipelineDefinition<Movie>()
.Match(...)
.Group(...);
var results = collection.Aggregate(pipeline, options);

Se você usar uma expressão LINQ ou de construtor que não esteja disponível na API de query, poderá receber uma mensagem de exceção Unsupported filter ... ou Expression not supported .... Uma expressão pode não estar disponível nos seguintes casos:

  1. Você está tentando usar um recurso .NET/C# que não tem uma representação MongoDB equivalente. Por exemplo, .NET/C# e MongoDB têm semântica diferente em torno de colações.

  2. O driver não oferece suporte a uma transformação específica do LINQ ou da expressão de construtor na API de query. Isso pode acontecer porque a query fornecida não tem tradução da API de query ou porque um recurso não foi implementado no driver.

Se você receber uma dessas exceções, tente as seguintes etapas:

  1. Use o MongoDB C# Analyzer para analisar suas expressões.

  2. Simplifique sua query sempre que possível.

  3. Forneça uma query como um objeto BsonDocument ou string JSON. Todas as classes de definição, como FilterDefinition, ProjectionDefinition e PipelineDefinition, oferecem suporte à conversão implícita de objetos BsonDocument ou strings JSON. Por exemplo, os seguintes filtros são equivalentes quando usados em uma query ou agregação:

    FilterDefinition<Entity> typedFilter = Builders<Entity>.Filter.Eq(e => e.A, 1);
    FilterDefinition<Entity> bsonFilter = new BsonDocument {{ "a", 1 }};
    FilterDefinition<Entity> jsonFilter = "{ a : 1 }";

Você pode combinar objetos BsonDocument, strings JSON, POCOs na mesma query, como mostrado no exemplo a seguir:

FilterDefinition<Entity> filter = Builders<Entity>.Filter
.And(Builders<Entity>.Filter
.Eq(e => e.A, 1), BsonDocument
.Parse("{ b : 2 }"));

Observação

Se você usar um objeto BsonDocument ou uma string JSON, os nomes dos campo deverão corresponder aos nomes sensíveis a maiúsculas e minúsculas armazenados pelo servidor. Por exemplo, ao fazer referência ao campo _id , você deve referir-se a ele usando o nome de campo _id.

Como a API de query não reconhece mapeamentos manuais de classe, atributos de serialização BSON ou convenções de serialização, você não pode usar esses mecanismos para alterar os nomes dos campo. Por exemplo, se um documento contiver um campo chamado FirstName anotado com [BsonElement("first_name")], você deverá referir-se a ele como first_name nas definições de string BsonDocument ou JSON.

Para obter uma lista completa dos estágios de agregação, consulte Estágios de agregação no manual do MongoDB Server.

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