Overview
Puede utilizar el MongoDB Kotlin Driver para contar el número de documentos en una colección. Existen dos métodos de instancia en la clase MongoCollection que se pueden llamar para contabilizar 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 en la colección según los metadatos de la colección. No se puede especificar una query cuando se utiliza este método.
El método estimatedDocumentCount() devuelve más rápido que el método countDocuments() porque utiliza los metadatos de la colección en lugar de escanear toda la colección. El método countDocuments() devuelve un recuento preciso del número de documentos y admite la especificación de 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 hacer esto, usa una sugerencia para aprovechar el índice incorporado en el campo _id. Utiliza esta técnica solo cuando llames 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 usas la Stable API v1 con la opción "strict" y una versión del servidor MongoDB entre 5.0.0 y 5.0.8 inclusive, es posible que las llamadas al método estimatedDocumentCount() generen un error debido a un error en el 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 puedes 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 mediante un URI de conexión. Para saber más sobre cómo conectarse a su instancia de MongoDB, consulte la 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: