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 servidor MongoDB 5.0.9 ou posterior, ou defina a opção "strict" da API estável como 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 |
|---|---|---|
|
| Você pode definir as seguintes opções:
|
|
| Você pode definir um comentário usando o método |
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: