Overview
En esta guía, puedes aprender cómo ejecutar un comando de base de datos usando el driver de Kotlin. Puedes utilizar comandos de base de datos para realizar una variedad de tareas administrativas y de diagnóstico, como obtener estadísticas del servidor, inicializar un set de réplicas o ejecutar una pipeline de agregación.
Importante
Prefiere los métodos del controlador a los comandos de base de datos
El controlador proporciona métodos de encapsulamiento para numerosos comandos de base de datos. Recomendamos usar métodos de controlador en lugar de ejecutar comandos de base de datos siempre que sea posible.
Para realizar tareas administrativas, usa el Shell de MongoDB en vez del driver de Kotlin. Llamando al db.runCommand()
El método dentro del shell es el método preferido para emitir comandos de base de datos, ya que proporciona una interfaz coherente entre el shell y los drivers.
Ejecutar un comando
Para ejecutar un comando de base de datos, especifica el comando y cualquier parámetro relevante en un documento y luego pásalo al método runCommand().
El siguiente código muestra cómo se puede usar el método runCommand() para ejecutar el comando dbStats, que devuelve estadísticas de una base de datos especificada de MongoDB:
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.
import com.mongodb.MongoException import com.mongodb.kotlin.client.coroutine.MongoClient import kotlinx.coroutines.runBlocking import org.bson.BsonDocument import org.bson.BsonInt64 import org.bson.json.JsonWriterSettings 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") try { val command = BsonDocument("dbStats", BsonInt64(1)) val commandResult = database.runCommand(command) println(commandResult.toJson(JsonWriterSettings.builder().indent(true).build())) } catch (me: MongoException) { System.err.println("An error occurred: $me") } mongoClient.close() }
{ "db": "sample_mflix", "collections": 5, "views": 0, "objects": 75595, "avgObjSize": 692.1003770090614, "dataSize": 52319328, "storageSize": 29831168, "numExtents": 0, "indexes": 9, "indexSize": 14430208, "fileSize": 0, "nsSizeMB": 0, "ok": 1 }
Para obtener una lista completa de comandos de base de datos y los parámetros correspondientes, consulta la guía Comandos de base de datos.
Opciones de comando
Puedes especificar un comportamiento opcional del comando para el método runCommand() incluyendo un parámetro readPreference. El siguiente ejemplo muestra cómo especificar una preferencia de lectura y pasarla como una opción al método runCommand():
val command = Document("hello", 1) val commandReadPreference = Document("readPreference", "secondary") val result = database.runCommand(command, commandReadPreference)
Para obtener más información sobre las opciones de preferencia de lectura, consulta Preferencia de lectura en el Manual del servidor.
Nota
El método runCommand() ignora la configuración de preferencia de lectura que se haya establecido en el objeto database. Si no especificas una preferencia de lectura, este método utiliza la preferencia de lectura primary.
Respuesta
El método runCommand() devuelve un objeto Document que contiene la respuesta de la base de datos después de que se haya ejecutado el comando. Cada comando de base de datos realiza una función diferente, por lo que el contenido de la respuesta puede variar según los comandos. Sin embargo, cada respuesta contiene documentos con los siguientes campos:
Campo | Descripción |
|---|---|
<command result> | Proporciona campos específicos del comando de base de datos. Por ejemplo, |
| Indica si el comando ha tenido éxito ( |
| Indica el tiempo lógico de la operación. MongoDB utiliza el tiempo lógico para ordenar las operaciones. Para aprender más sobre el tiempo lógico, consulte nuestra entrada de blog acerca del Reloj Lógico Global. |
| Proporciona un documento que devuelve la hora firmada del clúster. El tiempo del clúster es un tiempo lógico utilizado para ordenar las operaciones. El documento contiene los siguientes campos:
|
Información Adicional
Para más información sobre los conceptos de esta guía, consulta la siguiente documentación: