Overview
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
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 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 consistente entre el shell y los controladores.
Ejecutar un comando
Para ejecutar un comando de base de datos, debe especificar el comando y los parámetros relevantes en un documento y, a continuación, pasar este documento a un método de ejecución de comandos. El controlador de Node.js proporciona los siguientes métodos para ejecutar comandos de base de datos:
command(), que devuelve la respuesta del comando como un tipoDocument. Puedes utilizar este método con cualquier comando de base de datos.runCursorCommand(), que devuelve la respuesta del comando como un tipo iterableRunCommandCursor. Este método solo se puede usar si el comando de base de datos devuelve varios documentos de resultados.
El siguiente código muestra cómo puede utilizar el método command() para ejecutar el comando hello, que devuelve información sobre el rol del miembro actual en el conjunto 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 Información adicional.
Opciones de comando
Puede especificar un comportamiento de comando opcional para los métodos command() y runCursorCommand().
El command() método acepta un RunCommandOptions objeto. Para obtener más información sobre el RunCommandOptions tipo, 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 controlador Node.js, solo puedes pasar las siguientes opciones al método command():
commentenableUtf8ValidationrawreadPreferencesession
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 una preocupación de escritura majority:
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 preferencia de lectura que haya configurado en su objeto Db. De forma predeterminada, estos métodos utilizan la preferencia de lectura primary.
El siguiente código muestra cómo especificar una preferencia de lectura y pasarla como una 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, consulte Preferencia de lectura en el manual del servidor.
Respuesta
Cada método devuelve un objeto Document o un cursor que contiene la respuesta de la base de datos tras la ejecución del comando. Cada comando de 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, |
| Indica si el comando ha tenido éxito ( |
| Indica 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 entrada de blog sobre el Reloj Lógico Global. |
| 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:
|
Ejemplo
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); }
Salida
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.
Ejemplo de comando de ejecución: archivo completo
Nota
Configuración de ejemplo
Este ejemplo se conecta a una instancia de MongoDB mediante una URI de conexión. Para obtener más información sobre cómo conectarse a su instancia de MongoDB, consulte Guía de conexión a MongoDB. Este ejemplo también utiliza la movies colección de la sample_mflix base de datos incluida en los conjuntos de datos de ejemplo de Atlas. Puede cargarlos en su base de datos en la versión gratuita de MongoDB Atlas siguiendo la guía de introducción de MongoDB.
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 código de muestra, enviamos el comando dbStats para solicitar estadísticas de la base de datos sample_mflix:
1 /* Run a database command */ 2 3 import { MongoClient } from "mongodb"; 4 5 // Replace the uri string with your MongoDB deployment's connection string 6 const uri = "<connection string uri>"; 7 8 const client = new MongoClient(uri); 9 10 async 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 } 25 run().catch(console.dir);
Ejecutar el comando anterior produce el siguiente resultado:
{ db: 'sample_mflix', collections: 6, views: 0, objects: 75620, ..
Información Adicional
Para más información sobre los conceptos de esta guía, consulta la siguiente documentación:
Para aprender a recuperar datos de un cursor, consulte la página Fundamentos de acceder a datos desde un cursor.