Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Ejecute un comando de base de datos

En esta guía, puede aprender cómo utilizar el controlador .NET/C# 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 de .NET/C# Driver. El 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() método Shell o los métodos RunCommand() y RunCommandAsync() del controlador, que se describen en esta guía.

Los ejemplos en esta guía utilizan la colección sample_restaurants.restaurants de los conjuntos de datos de muestra de Atlas. Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulta el Inicio rápido.

Para ejecutar un comando de base de datos, crea un objeto BsonDocument que especifique el comando y pásalo como parámetro al método RunCommand() o RunCommandAsync(). Se puede especificar el tipo de valor que devuelven estos métodos utilizando el parámetro de tipo. Puedes usar el tipo BsonDocument para devolver la respuesta del comando, o puedes especificar tu propia clase fuertemente tipada para deserializar la respuesta del comando.

El siguiente ejemplo ejecuta el comando hello en una base de datos, que devuelve información sobre el servidor. Elija el Asynchronous o la pestaña Synchronous para ver el código correspondiente.

var command = new BsonDocument("hello", 1);
var result = await database.RunCommandAsync<BsonDocument>(command);
var command = new BsonDocument("hello", 1);
var result = database.RunCommand<BsonDocument>(command);

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.

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.

Se puede 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 ejemplo. Selecciona la pestaña Asynchronous o Synchronous para ver el código correspondiente.

var command = new BsonDocument("hello", 1);
var result = await database.RunCommandAsync<BsonDocument>(command, ReadPreference.Secondary);
var command = new BsonDocument("hello", 1);
var result = database.RunCommand<BsonDocument>(command, ReadPreference.Secondary);

Tip

Para obtener más información sobre las opciones de preferencia de lectura, consulta Preferencia de lectura en el manual de MongoDB Server.

El documento de respuesta del comando en bruto devuelto por el método RunCommand() contiene los siguientes campos:

Campo
Descripción

<command result>

Campos específicos del comando de base de datos. Por ejemplo, la instrucción hello devuelve el campo topologyVersion.

ok

Indica si la orden se completó con éxito (1.0) o falló (0.0). El controlador activa un MongoCommandException si el valor ok es 0.0.

$clusterTime

Un documento que contiene la hora del clúster firmada. El tiempo de clúster es un tiempo lógico utilizado para el orden de las operaciones. Este campo solo se aplica a comandos ejecutados en conjuntos de réplicas o clústeres particionados.

operationTime

El tiempo lógico de la ejecución de la operación. Este campo solo se 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.

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 utilizando el método ToJson() en el objeto BsonDocument devuelto. Seleccione la pestaña Asynchronous o Synchronous para ver el código correspondiente.

var command = new BsonDocument("dbStats", 1);
var result = await database.RunCommandAsync<BsonDocument>(command);
Console.WriteLine(result.ToJson());
var command = new BsonDocument("dbStats", 1);
var result = database.RunCommand<BsonDocument>(command);
Console.WriteLine(result.ToJson());

La salida de este comando incluye información sobre los datos almacenados en la base de datos, como se muestra en el resultado devuelto por el ejemplo anterior:

{ "db" : "sample_restaurants", "collections" : 2, "views" : 0, "objects" :
NumberLong(25438), "avgObjSize" : 548.95172576460413, "dataSize" : NumberLong(13964234),
"storageSize" : NumberLong(8056832), "totalFreeStorageSize" : NumberLong(0),
"numExtents" : NumberLong(0), "indexes" : 2, "indexSize" : NumberLong(1044480),
"indexFreeStorageSize" : NumberLong(0), "fileSize" : NumberLong(0), "nsSizeMB" : 0, "ok" : 1 }

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

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

Volver

Bases de datos y colecciones

En esta página