Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Ejecute un comando

En esta guía, puedes aprender a utilizar el controlador de Rust 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.

Esta guía incluye las siguientes secciones:

  • Ejecutar un Comando describe la sintaxis y el comportamiento de la run_command() y métodos run_cursor_command()

  • Respuesta describe la información que devuelven los métodos de ejecución de comandos

  • Ejemplo de comando proporciona un ejemplo de comando y describe la salida del comando

  • Información adicional proporciona enlaces a recursos y documentación de la API para los tipos y métodos mencionados en esta guía

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, utilice MongoDB Shell en lugar del controlador de Rust. Llamar al db.runCommand() método dentro del shell es la mejor manera de ejecutar comandos de base de datos, ya que proporciona una interfaz consistente entre el shell y los controladores.

Para ejecutar un comando de base de datos, debe especificar el comando y los parámetros relevantes en un documento de comando y, a continuación, pasar dicho documento a un método de ejecución. El controlador de Rust proporciona los siguientes métodos para ejecutar comandos de base de datos:

  • run_command(), que devuelve la respuesta del comando como un tipo Document. Puedes utilizar este método con cualquier comando de base de datos.

  • run_cursor_command()Devolviendo la respuesta del comando como un tipo iterable Cursor. Sólo puedes utilizar este método si tu comando de base de datos devuelve varios documentos de resultados.

El siguiente código muestra cómo se puede utilizar el método run_command() para ejecutar el comando hello, el cual genera información sobre el rol actual del nodo en el set de réplicas, en una base de datos:

let result = my_db.run_command(doc! { "hello": 1 }).await?;

El comando checkMetadataConsistency devuelve múltiples documentos de resultados. Puedes utilizar el método run_cursor_command() para ejecutar este comando y recopilar los resultados, como se muestra en el siguiente código:

let cursor = my_db
.run_cursor_command(doc! { "checkMetadataConsistency": 1 })
.await?;

Para encontrar un enlace a una lista completa de comandos de bases de datos y parámetros correspondientes, consulta la sección Información adicional.

Nota

preferencia de lectura

Los métodos run_command() y run_cursor_command() no respetan la preferencia de lectura que podría haber establecido en su objeto Database en otro lugar de su código. Por defecto, utilizan la preferencia de lectura primary.

Puedes configurar una preferencia de lectura para la ejecución de comandos encadenando el método selection_criteria() a run_command() o run_cursor_command(). El siguiente código muestra cómo especificar una preferencia de lectura en una instancia de SelectionCriteria y pasarla como parámetro al método selection_criteria():

let result = my_db
.run_command(doc! { "hello": 1 })
.selection_criteria(SelectionCriteria::ReadPreference(ReadPreference::Primary))
.await?;

Para establecer una preferencia de lectura para el método run_cursor_command(), utilice la misma sintaxis que en el ejemplo anterior.

Para obtener más información sobre las opciones de preferencia de lectura, consulta Preferencia de lectura en el Manual del servidor.

El método run_command() devuelve un objeto Document que contiene la respuesta de la base de datos después de que se haya ejecutado el comando. El run_cursor_command() devuelve un Cursor que referencia múltiples documentos de resultados.

Cada comando de base de datos realiza una función diferente, por lo que el contenido de la respuesta puede variar dependiendo del comando ejecutado. Sin embargo, cada respuesta contiene un documento con los siguientes campos:

Campo
Descripción

<command result>

Campos específicos del comando de base de datos. Por ejemplo, count devuelve el campo n y explain devuelve el campo queryPlanner.

ok

Indica si el comando ha tenido éxito (1) o ha fallado (0).

operationTime

El tiempo lógico de la operación. MongoDB utiliza el tiempo lógico para ordenar las operaciones.

Para obtener más información sobre el tiempo lógico, consulte nuestra publicación de blog sobre el Reloj Lógico Global.

$clusterTime

Un documento que contiene la hora de clúster firmada. La hora de clúster es una hora lógica utilizada para ordenar las operaciones.

Este documento contiene los siguientes campos:

  • clusterTime, la marca de tiempo del tiempo de clúster más alto conocido para el miembro

  • signature, un documento que contiene el hash del tiempo del clúster y la identificación de la clave utilizada para firmar el tiempo del clúster

El siguiente código muestra cómo puedes utilizar el método run_command() para ejecutar el comando explain para una operación count en la colección flowers de la base de datos plants. El comando explain se ejecuta en el modo de verbosidad "queryPlanner":

let my_db = client.database("plants");
let count_command = doc! { "count": "flowers" };
let explain_command =
doc! {
"explain": count_command,
"verbosity": "queryPlanner"
};
let result = my_db.run_command(explain_command).await?;

La salida incluye campos que explican la ejecución de la operación count, como el plan ganador, que es el plan seleccionado por el optimizador del query, y cualquier plan rechazado. La salida también contiene información sobre la ejecución del comando explain:

{
"$clusterTime": {
"clusterTime": {
"T": 1673969525,
"I": 24
},
"signature": {...}
},
"command": {
"$db": "plants",
"count": "flowers"
},
"explainVersion": "1",
"ok": 1,
"operationTime": {
"T": 1673969525,
"I": 24
},
"queryPlanner": {
"indexFilterSet": false,
"maxIndexedAndSolutionsReached": false,
"maxIndexedOrSolutionsReached": false,
"maxScansToExplodeReached": false,
"namespace": "plants.flowers",
"rejectedPlans": [],
"winningPlan": {
"stage": "RECORD_STORE_FAST_COUNT"
}
},
"serverInfo": {...},
"serverParameters": {
"internalDocumentSourceGroupMaxMemoryBytes": 104857600,
...
}
}

Para obtener más información sobre los conceptos de esta guía, consulte la siguiente documentación en el manual del servidor:

Volver

Rastreo y registro

En esta página