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 de base de datos

En esta guía, aprenderá a ejecutar un comando de base de datos con el controlador de Node.js. 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

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 Node.js. Llamando 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 coherente entre el shell y los drivers.

Para ejecutar un comando de base de datos, debes especificar el comando y cualquier parámetro relevante en un documento y, a continuación, pasar este documento a un método de ejecución de comando. El driver de Node.js proporciona los siguientes métodos para ejecutar comandos de base de datos:

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

  • runCursorCommand()Devolviendo la respuesta del comando como un tipo iterable RunCommandCursor. 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 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:

const result = await myDB.command({ hello: 1 });

Para obtener una lista completa de los comandos de base de datos y los parámetros correspondientes, consulte la sección de información adicional.

Puedes especificar el comportamiento del comando opcional para los métodos command() y runCursorCommand().

El método command() acepta un objeto RunCommandOptions. Para obtener más información sobre el tipo RunCommandOptions, consulte la Documentación de la API.

El tipo runCursorCommand() method acepta un RunCursorCommandOptions objeto. Para obtener más información sobre el RunCursorCommandOptions tipo, consulte la documentación de la API.

A partir de la versión 6.0 del driver Node.js, solo puedes pasar las siguientes opciones al método command():

  • comment

  • enableUtf8Validation

  • raw

  • readPreference

  • session

Puede configurar más opciones en el documento que pasa al command() método. Para obtener más información sobre un comando y las opciones que acepta, localícelo y siga el enlace en la sección "Comandos de base de datos" del manual del servidor.

El siguiente código muestra cómo especificar un comando grantRolesToUser que se ejecuta con un majority nivel de confirmación de escritura (write concern):

const commandDoc = {
grantRolesToUser: "user011",
roles: [ "readWrite" ],
writeConcern: { w: "majority" }
};
const result = await myDB.command(commandDoc);

Nota

preferencia de lectura

Los métodos command() y runCursorCommand() ignoran la configuración de preferencia de lectura que hayas establecido en tu objeto Db. Por defecto, estos métodos usan la preferencia de lectura primary.

El siguiente código muestra cómo especificar una preferencia de lectura y pasarla como opción al método command():

const commandOptions = { readPreference: "nearest" };
const result = await myDB.command(commandDoc, commandOptions);

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

Cada método devuelve un objeto Document o un cursor que contiene la respuesta de la base de datos después de ejecutar 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, 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 el tiempo lógico para ordenar las operaciones. Para aprender más sobre el tiempo lógico, consulte nuestra entrada de blog acerca del Reloj Lógico Global.

$clusterTime

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:

  • clusterTime, que es la marca de tiempo del mayor tiempo conocido del clúster para el nodo.

  • 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.

El siguiente código muestra cómo puede utilizar el método runCursorCommand() para ejecutar el comando checkMetadataConsistency en la base de datos testDB e iterar a través de los resultados:

// Connect to the "testDB" database
const db = client.db("testDB");
// Run a cursor command to check metadata consistency within the database
const cursor = await db.runCursorCommand({
checkMetadataConsistency: 1,
});
// Iterate through the cursor's results and print the contents
for await (const doc of cursor) {
console.log(doc);
}

La salida contiene el contenido del objeto cursor. Los documentos describen cualquier inconsistencia de metadatos en la base de datos:

{
type: ...,
description: ...,
details: {
namespace: ...,
info: ...
}
}
{
type: ...,
description: ...,
details: {
namespace: ...,
collectionUUID: ...,
maxKeyObj: ...,
...
}
}

Nota

Si se almacena la respuesta al comando en un cursor, solo verá los documentos de resultado del comando al acceder al contenido del cursor. No se mostrarán los campos ok, operationTime y $clusterTime.

Nota

Configuración de ejemplo

Este ejemplo se conecta a una instancia de MongoDB utilizando un URI de conexión. Para obtener más información sobre cómo conectarse a tu instancia de MongoDB, consulta el Guía Conectar a MongoDB. Este ejemplo también utiliza la colección movies en la base de datos sample_mflix incluida en los conjuntos de datos de muestra de Atlas. Puedes cargarlos en tu base de datos en el nivel gratuito de MongoDB Atlas siguiendo MongoDB Empezar.

Nota

No hay características específicas de TypeScript

El siguiente ejemplo de código utiliza JavaScript. No hay características específicas de TypeScript del controlador que sean relevantes para este caso de uso.

En el siguiente ejemplo de código, enviamos el comando dbStats para solicitar estadísticas desde la base de datos sample_mflix:

1/* Run a database command */
2
3import { MongoClient } from "mongodb";
4
5// Replace the uri string with your MongoDB deployment's connection string
6const uri = "<connection string uri>";
7
8const client = new MongoClient(uri);
9
10async function run() {
11 try {
12 // Get the "sample_mflix" database
13 const db = client.db("sample_mflix");
14
15 // Find and print the storage statistics for the "sample_mflix" database using the 'dbStats' command
16 const result = await db.command({
17 dbStats: 1,
18 });
19 console.log(result);
20 } finally {
21 // Close the database connection on completion or error
22 await client.close();
23 }
24}
25run().catch(console.dir);

Ejecutar el comando anterior produce el siguiente resultado:

{
db: 'sample_mflix',
collections: 6,
views: 0,
objects: 75620,
..

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

Para aprender cómo recuperar datos de un cursor, consulta la página de conceptos básicos Acceder a datos desde un cursor.

Volver

Indexes

En esta página