Overview
En esta guía, puedes aprender cómo ejecutar un comando de base de datos con el controlador de C++. 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 MongoDB Shell en lugar del controlador C++. Llamando a la 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, llama al método de ejecución run_command() en una instancia mongocxx::database y pasa un documento que especifique el comando y cualquier argumento relevante. El método devuelve el resultado del comando como un objeto bsoncxx::document::value.
Puede utilizar el método run_command() con cualquier comando de base de datos. Para obtener una lista completa de comandos de base de datos y sus parámetros correspondientes, consulta Comandos de base de datos en el manual del servidor MongoDB.
El siguiente ejemplo muestra cómo se puede utilizar el método run_command() para ejecutar el comando hello en una base de datos, que devuelve información sobre el rol del nodo actual en el set de réplicas:
auto db = client["my_database"]; auto command = make_document(kvp("hello" , 1)); auto result = db.run_command(command.view()); std::cout << bsoncxx::to_json(result) << std::endl;
{ "topologyVersion" : { "processId" : ..., "counter" : ... }, "hosts" : [ ... ], "setName" : ..., "setVersion" : ..., "isWritablePrimary" : ..., "secondary" : ..., "primary" : ..., "tags" : { "region" : ..., "availabilityZone" : ..., "provider" : ..., "workloadType" : ..., "nodeType" : ..., "diskState" : ... }, "me" : ..., "electionId" : ..., "lastWrite" : ..., "lastWriteDate" : ..., "majorityOpTime" : ..., "majorityWriteDate" : ..., "maxBsonObjectSize" : ..., "maxMessageSizeBytes" : ..., "maxWriteBatchSize" : ..., "localTime" : ..., "logicalSessionTimeoutMinutes" : ..., "connectionId" : ..., "minWireVersion" : ..., "maxWireVersion" : ..., "readOnly" : ..., "ok" : ..., "$clusterTime" : ..., "signature" : ... }
Opciones de comando
Para personalizar el comportamiento de la ejecución de comandos, puedes definir opciones en el documento de comando que se pasa al método run_command(). Para aprender más sobre un comando y las opciones que acepta, ubica el comando y sigue el enlace correspondiente en la página de Comandos de base de datos en el manual del Servidor de MongoDB.
Por ejemplo, puedes pedirle al comando connectionStatus que devuelva el conjunto completo de privilegios que poseen los usuarios autenticados actualmente configurando la opción showPrivileges en true en el documento del comando:
auto db = client["my_database"]; auto command = make_document(kvp("connectionStatus" , 1), kvp("showPrivileges", true)); auto result = db.run_command(command.view()); std::cout << bsoncxx::to_json(result) << std::endl;
{ "authInfo" : { "authenticatedUsers" : [ { "user" : ..., "db" : ... } ], "authenticatedUserRoles" : [ { "role" : ..., "db" : ... } ], "authenticatedUserPrivileges" : [ { "resource" : { "db" : "", "collection" : "" }, "actions" : [ ... ] }, { "resource" : { "db" : "config", "collection" : "system.sessions" }, "actions" : [ ... ] }, ..., { "resource" : { "db" : "", "collection" : "" }, "actions" : [ ... ] } ] }, "ok" : 1 }
Respuesta
El método run_command() devuelve un objeto bsoncxx::document::value 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 este tiempo lógico para ordenar las operaciones. |
| Requiere un documento que devuelva el tiempo firmado de clúster. El tiempo de clúster es un tiempo lógico utilizado para el ordenamiento de 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:
Para aprender más sobre los métodos o tipos discutidos en esta guía, consulta la siguiente documentación de la API: