Overview
Puede utilizar el MongoDB Kotlin Driver para contar el número de documentos en una colección. Hay dos métodos de instancia en el MongoCollection clase que se puede llamar para contar el número de documentos en una colección:
countDocuments()devuelve un recuento preciso del número de documentos en la colección que coinciden con una query específica. Si especificas un filtro de query vacío, el método devuelve el número total de documentos en la colección.estimatedDocumentCount()Devuelve una estimación del número de documentos de la colección según sus metadatos. No se puede especificar una consulta al usar este método.
El método estimatedDocumentCount() devuelve resultados más rápido que el método countDocuments() porque utiliza los metadatos de la colección en lugar de analizarla por completo. El método countDocuments() devuelve un recuento preciso del número de documentos y permite especificar un filtro.
Tip
Cuando utilizas countDocuments() para devolver el número total de documentos en una colección, puedes mejorar el rendimiento evitando un escaneo de la colección. Para ello, use un pista para aprovechar el índice incorporado en el campo _id. Utiliza esta técnica solamente al llamar a countDocuments() con un parámetro de query vacío, por ejemplo:
val options = CountOptions().hintString("_id_") val numDocuments = collection.countDocuments(BsonDocument(), options)
Cuando se llama al método countDocuments(), se puede pasar opcionalmente un parámetro filtro de query. No se pueden pasar parámetros cuando se llama a estimatedDocumentCount().
Importante
Problema con Stable API V1 y MongoDB Server
Si está utilizando la API estable v1 con la opción "estricta" y una versión de servidor MongoDB entre 5.0.0 y 5.0.8 inclusive, las llamadas al método estimatedDocumentCount() pueden generar errores debido a un error del servidor.
Actualiza el servidor MongoDB 5.0.9 o uno posterior, o establece la opción de "estricto" de la Stable API en false para evitar este problema.
También puede pasar un parámetro opcional a cualquiera de estos métodos para especificar el comportamiento de la llamada:
Método | Clase de parámetros opcionales | Descripción |
|---|---|---|
|
| Puede configurar las siguientes opciones:
|
|
| Puedes establecer un comentario usando el método |
Ambos métodos devuelven el número de documentos coincidentes como un primitivo Long.
Ejemplo
Nota
Este ejemplo se conecta a una instancia de MongoDB utilizando un URI de conexión. Para obtener más información sobre cómo conectarse a tu instancia de MongoDB, consulta el guía de conexión.
El siguiente ejemplo estima el número de documentos en la colección movies de la base de datos sample_mflix, y luego devuelve un recuento exacto del número de documentos en la colección movies con Spain en el 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 adicionales
Para información adicional sobre las clases y métodos mencionados en esta página, consulta la siguiente documentación de API: