Docs Menu
Docs Home
/ /

Ejecute un comando

En esta guía, aprenderá a ejecutar un comando de base de datos con el controlador de C++. Puede usar comandos de base de datos para realizar diversas tareas administrativas y de diagnóstico, como obtener estadísticas del servidor, inicializar un conjunto de réplicas o ejecutar una canalización de agregación.

Importante

Prefiera 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 el MongoDB Shell en lugar del controlador C++. Llamar 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 consistente entre el shell y los controladores.

Para ejecutar un comando de base de datos, llame al método de ejecución run_command() en una instancia mongocxx::database y pase un documento que especifique el comando y los argumentos pertinentes. 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 miembro actual en el conjunto 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" : ...
}

Para personalizar el comportamiento de ejecución de comandos, puede configurar las opciones en el documento de comandos que pasa al run_command() método. Para obtener más información sobre un comando y las opciones que acepta, localícelo y siga el enlace correspondiente en la página Comandos de base de datos del manual de MongoDB Server.

Por ejemplo, puede indicar 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
}

El método run_command() devuelve un objeto bsoncxx::document::value que contiene la respuesta de la base de datos tras la ejecución del comando. Cada comando de la base de datos realiza una función diferente, por lo que el contenido de la respuesta puede variar según el comando. 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, count devuelve el campo n y explain el campo queryPlanner.

ok

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

operationTime

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

$clusterTime

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

El documento contiene los siguientes campos:

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

  • signature, que es un documento que contiene el hash de la hora del clúster y la ID de la clave utilizada para firmar la hora del clúster.

Para más información sobre los conceptos de esta guía, consulta la siguiente documentación:

Para obtener más información sobre los métodos o tipos analizados en esta guía, consulte la siguiente documentación de API:

Volver

Agregación

En esta página