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 uma contagem precisa do número de documento na collection que correspondem a uma query especificada. Se você especificar um filtro de query vazio, o método retornará o número total de documento na collection.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 collection em vez de fazer a varredura de toda a collection. 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:
val options = CountOptions().hintString("_id_") val numDocuments = collection.countDocuments(BsonDocument(), options)
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 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 Stable API 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 coleção movies
no banco de dados sample_mflix
e, em seguida, retorna uma contagem precisa do número de documentos na coleção movies
com Spain
no campo countries
. 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):
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 .
import com.mongodb.MongoException import com.mongodb.client.model.Filters import com.mongodb.kotlin.client.coroutine.MongoClient import kotlinx.coroutines.runBlocking data class Movie(val countries: List<String>) fun main() = runBlocking { // Replace the uri string with your MongoDB deployment's connection string val uri = "<connection string uri>" val mongoClient = MongoClient.create(uri) val database = mongoClient.getDatabase("sample_mflix") val collection = database.getCollection<Movie>("movies") val query = Filters.eq(Movie::countries.name, "Spain") try { val estimatedCount = collection.estimatedDocumentCount() println("Estimated number of documents in the movies collection: $estimatedCount") val matchingCount = collection.countDocuments(query) println("Number of movies from Spain: $matchingCount") } catch (e: MongoException) { System.err.println("An error occurred: $e") } mongoClient.close() }
Estimated number of documents in the movies collection: 23541 Number of movies from Spain: 755
Para obter mais informações sobre as classes e métodos mencionados nesta página, consulte a seguinte documentação da API: