Menu Docs
Página inicial do Docs
/ / /
Kotlin Coroutine
/

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.

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()
}

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