Menu Docs

Página inicial do DocsDesenvolver aplicaçõesMongoDB DriversDriver de sincronização Java

Contagem de documentos

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
countDocuments()
CountOptions
Você pode especificar um número máximo de documentos para contar utilizando o método limit() ou a quantidade máxima de tempo de execução utilizando o método maxTime().
estimatedDocumentCount()
EstimatedDocumentCountOptions
Você pode especificar o tempo máximo de execução utilizando o método maxTime().

Ambos os métodos retornam o número de documentos correspondentes como um primitivo long.

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.

Observaçã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 de conexão.

// Runs count operations on a collection by using the Java driver
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");
try {
// 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);
// Prints a message if any exceptions occur during the operations
} catch (MongoException me) {
System.err.println("An error occurred: " + me);
}
}
}
}

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

API legado

Se você estiver usando a API herdada, consulte nossa página de perguntas frequentes para saber quais alterações devem ser feitas nesse exemplo de código.

Para obter mais informações sobre as classes e métodos mencionados nesta página, consulte a seguinte documentação da API:

← Fique atento às mudanças