Visão geral
You can use the MongoDB Kotlin Driver to count the number of documents in a collection. There are two instance methods in the MongoCollection class that you can call to count the number of documents in a collection:
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()returns an estimation of the number of documents in the collection based on the collection metadata. You cannot specify a query when you use this method.
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
When you use countDocuments() to return the total number of documents in a collection, you can improve performance by avoiding a collection scan. To do this, use a hint to take advantage of the built-in index on the _id field. Use this technique only when calling countDocuments() with an empty query parameter, for example:
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
Observação
This example connects to an instance of MongoDB by using a connection URI. To learn more about connecting to your MongoDB instance, see the connection guide.
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 Spain no campo countries :
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
Recursos adicionais
Para obter mais informações sobre as classes e métodos mencionados nesta página, consulte a seguinte documentação da API: