Overview
En esta guía, puedes aprender cómo usar el driver Scala para ejecutar un comando de base de datos. 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 driver proporciona métodos contenedores para muchos comandos de base de datos. Si es posible, recomendamos utilizar estos métodos en lugar de ejecutar comandos de base de datos.
Para realizar tareas administrativas, usa el MongoDB Shell en lugar del driver Scala. La shell proporciona métodos asistentes que podrían no estar disponibles en el driver.
Si no hay asistentes disponibles en el driver o en la shell, puedes usar el db.runCommand() el método Shell o el método runCommand() driver, que se describe en esta guía.
Datos de muestra
Los ejemplos de esta guía utilizan la base de datos sample_restaurants de los conjuntos de datos de muestras Atlas. Para acceder a esta base de datos desde tu aplicación Scala, crea un MongoClient que se conecte a un clúster de Atlas y asigna el siguiente valor a tu variable database:
val database: MongoDatabase = mongoClient.getDatabase("sample_restaurants")
Para aprender cómo crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de ejemplo, consulta la guía MongoDB Get Started.
Ejecutar un comando
Para ejecutar un comando de base de datos, cree un objeto Document que especifique el comando y páselo como parámetro al método runCommand(). Este método devuelve una instancia de SingleObservable, y puede suscribirse a este observable para ejecutar el comando y acceder al resultado del comando.
El siguiente ejemplo llama al método runCommand() en una base de datos para ejecutar el comando hello, que devuelve información sobre el servidor:
database.runCommand(Document("hello" -> 1)) .subscribe((doc: Document) => ())
Tip
Para ver una lista completa de los comandos de base de datos y sus parámetros correspondientes, consulta Comandos de base de datos en el manual de MongoDB Server.
Configura una Preferencia de lectura
El método runCommand() no hereda la preferencia de lectura que puedes haber establecido en tu instancia MongoDatabase. Por defecto, runCommand() usa la preferencia de lectura primary.
Puedes establecer una preferencia de lectura para la ejecución del comando pasando una instancia de ReadPreference como parámetro a runCommand(), como se muestra en el siguiente código:
database.runCommand(Document("hello" -> 1), ReadPreference.secondary()) .subscribe((doc: Document) => ())
Tip
Para obtener más información sobre las opciones de preferencia de lectura, consulta Preferencia de lectura en el manual de MongoDB Server.
Respuesta
El método runCommand() devuelve un SingleObservable que contiene la respuesta de la base de datos para el comando dado. Puedes llamar al método subscribe() en el observable para ejecutar el comando y acceder a la respuesta como un documento.
El documento de respuesta del comando sin procesar contiene los siguientes campos:
Campo | Descripción |
|---|---|
| Campos específicos del comando de base de datos. Por ejemplo, la instrucción |
| Indica si la orden se completó con éxito ( |
| Un documento que contiene la hora del clúster firmada. El tiempo de clúster es un tiempo lógico que se utiliza para la ordenación de operaciones. Este campo solo se aplica a los comandos ejecutados en sets de réplicas o clústeres. |
| El tiempo lógico de la ejecución de la operación. Este campo solo aplica a los comandos ejecutados en sets de réplicas o clústeres. |
Tip
Para obtener más información sobre el tiempo lógico, consulte la entrada de Wikipedia sobre el Reloj lógico.
Ejemplo
El siguiente ejemplo ejecuta el comando dbStats para recuperar estadísticas de almacenamiento de la base de datos sample_restaurants y luego imprime los resultados del comando:
database.runCommand(Document("dbStats" -> 1)) .subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
La salida de este comando incluye información sobre los datos almacenados en la base de datos, como se muestra en el siguiente código:
{"db": "sample_restaurants", "collections": 4, "views": 0, "objects": 18767, "avgObjSize": 596.1911866574306, "dataSize": 11188720, "storageSize": 7528448, "totalFreeStorageSize": 0, "numExtents": 0, "indexes": 6, "indexSize": 1519616, "indexFreeStorageSize": 0, "fileSize": 0, "nsSizeMB": 0, "ok": 1}
Información Adicional
Para obtener más información sobre los conceptos de esta guía, consulta la siguiente documentación en el manual de MongoDB Server:
Documentación de la API
Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API: