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
.
Exemplo
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: