Menu Docs
Página inicial do Docs
/ / /
Java síncrono
/

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 retornar o número total de documentos em uma coleção, você pode melhorar o desempenho evitando a digitalização da coleção. Para fazer isso, use uma dica 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 API estável V1 com a opção " strict " e uma versão do servidor MongoDB entre 5.0.0 e 5.0.8 inclusive, as chamadas de método para estimatedDocumentCount() podem ocorrer um erro devido a um bug no servidor.

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

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 {
long estimatedCount = collection.estimatedDocumentCount();
System.out.println("Estimated number of documents in the movies collection: " + estimatedCount);
long matchingCount = collection.countDocuments(query);
System.out.println("Number of movies from Spain: " + matchingCount);
} 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

Legacy API

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:

Voltar

Fique atento às mudanças