Contagem de documentos
Visão geral
Neste guia, você pode aprender a contar o número de documentos em suas coleções MongoDB . Há dois métodos de instância na classe MongoCollection
que você pode chamar para contar o número de documentos em uma coleção:
countDocuments()
retorna o número de documentos na coleção que correspondem a uma consulta especificada. Se você especificar um filtro de consulta vazio, o método retornará o número total de documentos na coleção.estimatedDocumentCount()
retorna uma estimativa do número de documentos na collection com base nos metadados da collection. Você não pode especificar uma query ao usar este método.
O método estimatedDocumentCount()
retorna mais rápido do que o método countDocuments()
, pois usa os metadados da coleção em vez de fazer a varredura de toda a coleção. O método countDocuments()
retorna uma contagem precisa do número de documentos e suporta a especificação de um filtro.
Dica
Ao usar countDocuments()
para gerar o número total de documentos em uma collection, você pode melhorar o desempenho ao evitar uma varredura da collection. Para fazer isso, use umadica para aproveitar o índice interno no campo _id
. Utilize esta técnica somente ao chamar countDocuments()
com um parâmetro de query vazio.
CountOptions opts = new CountOptions().hintString("_id_"); long numDocuments = collection.countDocuments(new BsonDocument(), opts);
Quando você chama o método countDocuments()
, você pode opcionalmente passar um parâmetro filtro de consulta. Você não pode passar nenhum parâmetro ao chamar estimatedDocumentCount()
.
Importante
Problema com o servidor MongoDB e a API V1 estável
Se você estiver usando a stable API V1
com a opção " strict " e uma versão do MongoDB Server entre 5.0.0 e 5.0.8 inclusive, as chamadas de método para estimatedDocumentCount()
podem produzir um erro devido a um servidor bug.
Atualize para o MongoDB Server 5.0.9 ou defina a opção "strict" da API estável para false
para evitar esse problema.
Você também pode passar um parâmetro opcional para qualquer um desses métodos para especificar o comportamento da chamada:
Método | Classe de Parâmetro Opcional | Descrição |
---|---|---|
|
| Você pode especificar um número máximo de documentos para contar utilizando o método |
|
| Você pode especificar o tempo máximo de execução utilizando o método |
Ambos os métodos retornam o número de documentos correspondentes como um primitivo long
.
Exemplo de contagem de documentos: arquivo completo
Observação
Exemplo de configuração
Esse exemplo se conecta a uma instância do MongoDB usando um URI de conexão. Para saber mais sobre como se conectar à sua instância do MongoDB, consulte o guia Criar um MongoClient. Este exemplo também utiliza a coleção do movies
no banco de dados do sample_mflix
incluído nos conjuntos de dados de amostra do Atlas. Você pode carregá-los em seu banco de dados na camada grátis do MongoDB Atlas seguindo o Guia de Introdução ao Atlas.
O exemplo a seguir estima o número de documentos na collection movies
no banco de dados sample_mflix
e, em seguida, retorna uma contagem precisa do número de documentos na collection movies
com Canada
no campo countries
.
/** * This file demonstrates how to open a change stream by using the Java driver. * It connects to a MongoDB deployment, accesses the "sample_mflix" database, and listens * to change events in the "movies" collection. The code uses a change stream with a pipeline * to only filter for "insert" and "update" events. */ package usage.examples; import static com.mongodb.client.model.Filters.eq; import org.bson.Document; import org.bson.conversions.Bson; import com.mongodb.MongoException; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; public class CountDocuments { public static void main(String[] args) { // Replace the uri string with your MongoDB deployment's connection string String uri = "<connection string uri>"; try (MongoClient mongoClient = MongoClients.create(uri)) { MongoDatabase database = mongoClient.getDatabase("sample_mflix"); MongoCollection<Document> collection = database.getCollection("movies"); Bson query = eq("countries", "Spain"); // Retrieves and prints the estimated number of documents in the collection long estimatedCount = collection.estimatedDocumentCount(); System.out.println("Estimated number of documents in the movies collection: " + estimatedCount); // Retrieves and prints the number of documents with a "countries" value of "Spain" long matchingCount = collection.countDocuments(query); System.out.println("Number of movies from Spain: " + matchingCount); } } }
Se você executar o código de amostra anterior, verá um resultado parecido com este (os números exatos podem variar dependendo dos seus dados):
Estimated number of documents in the movies collection: 23541 Number of movies from Spain: 755
Dica
Legacy API
Se você estiver usando a API legado, consulte a seção de perguntas frequentes do guia da API herdada para saber quais alterações devem ser feitas nesse exemplo de código.
Informações adicionais
Documentação da API
Para obter mais informações sobre as classes e métodos usados para contar documentos, consulte a seguinte documentação da API: