Contagem de documentos
Visão geral
Neste guia, você pode aprender a obter uma contagem precisa e estimada do número de documentos em sua coleção.
Dados de amostra
Os exemplos deste guia usam os seguintes documentos em uma collection chamada students
:
{ "_id": 1, "name": "Jonathon Howard ", "finalGrade": 87.5 } { "_id": 2, "name": "Keisha Freeman", "finalGrade": 12.3 } { "_id": 3, "name": "Wei Zhang", "finalGrade": 99.0 } { "_id": 4, "name": "Juan Gonzalez", "finalGrade": 85.5 } { "_id": 5, "name": "Erik Trout", "finalGrade": 72.3 } { "_id": 6, "name": "Demarcus Smith", "finalGrade": 88.8 }
A seguinte classe Student
modela os documentos nesta coleção:
public class Student { public int Id { get; set; } public string Name { get; set; } public double FinalGrade { get; set; } }
Observação
Os documentos na coleção students
usam a convenção de nomenclatura de camelo. Os exemplos neste guia usam um ConventionPack
para desserializar os campos na coleção em maiúsculas e minúsculas Pascal e mapeá-los para as propriedades na classe Student
.
Para saber mais sobre serialização personalizada, consulte Serialização personalizada.
Contagem precisa
Para contar o número de documentos que correspondem ao seu filtro de consulta, utilize o método CountDocuments()
. Se você passar por um filtro de query vazio, esse método retornará o número total de documentos na coleção.
Exemplo
O exemplo a seguir conta o número de documentos em que o valor de finalGrade
é menor que 80
:
var filter = Builders<Student>.Filter.Lt(s => s.FinalGrade, 80.0); var count = _myColl.CountDocuments(filter); Console.WriteLine("Number of documents with a final grade less than 80: " + count);
Number of documents with a final grade less than 80: 2
Modificar comportamento
Você pode modificar o comportamento do CountDocuments()
passando um tipo de CountOptions
como um parâmetro. Se você não especificar nenhuma opção, o driver usará valores padrão.
Você pode definir as seguintes propriedades em um objeto CountOptions
:
Propriedade | Descrição |
---|---|
| The type of language collation to use when sorting results. Default: null |
| The index to use to scan for documents to count. Default: null |
| The maximum number of documents to count. Default: 0 |
| The maximum amount of time that the query can run on the server. Default: null |
| The number of documents to skip before counting. Default: 0 |
Dica
Quando você usa CountDocuments()
para retornar o número total de documentos em uma collection, o MongoDB executa uma varredura de collection. Você pode evitar uma varredura de collection e melhorar o desempenho desse método usando uma dica para aproveitar o índice incorporado no campo _id
. Utilize esta técnica somente ao chamar CountDocuments()
com um parâmetro de query vazio.
var filter = Builders<Student>.Filter.Empty; CountOptions opts = new CountOptions(){Hint = "_id_"}; var count = collection.CountDocuments(filter, opts);
Contagem estimada
Para estimar o número total de documentos em sua coleção, use o método EstimatedDocumentCount()
.
Observação
O método EstimatedDocumentCount()
é mais eficiente do que o método CountDocuments()
, pois usa os metadados da collection em vez de fazer a varredura de toda a collection.
Modificar comportamento
Você pode modificar o comportamento do EstimatedDocumentCount()
passando um tipo de EstimatedDocumentCountOptions
como um parâmetro. Se você não especificar nenhuma opção, o driver usará valores padrão.
Você pode definir as seguintes propriedades em um objeto EstimatedDocumentCountOptions
:
Propriedade | Descrição |
---|---|
| The maximum amount of time that the query can run on the server. Default: null |
Exemplo
O exemplo a seguir estima o número de documentos na coleção students
:
var count = _myColl.EstimatedDocumentCount(); Console.WriteLine("Estimated number of documents in the students collection: " + count);
Estimated number of documents in the students collection: 6
Agregação
Você pode utilizar o método de construtor Count()
para contar o número de documentos em uma aggregation pipeline.
Exemplo
O exemplo a seguir executa as seguintes ações:
Especifica um estágio de correspondência para encontrar documentos com um valor
FinalGrade
maior que80
Conta o número de documentos que correspondem aos critérios
var filter = Builders<Student> .Filter.Gt(s => s.FinalGrade, 80); var result = _myColl.Aggregate().Match(filter).Count(); Console.WriteLine("Number of documents with a final grade more than 80: " + result.First().Count);
Number of documents with a final grade more than 80: 4
Informações adicionais
Para saber mais sobre as operações mencionadas, consulte os seguintes guias:
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: