Menu Docs
Página inicial do Docs
/ / /
Controlador Node.js

Executar um comando de banco de dados

Neste guia, você pode aprender como executar um comando de banco de dados com o driver do Node.js. Você pode usar comandos de banco de dados para executar uma variedade de tarefas administrativas e de diagnóstico, como buscar estatísticas do servidor, inicializando um conjunto de réplicas ou executando um pipeline de agregação.

Importante

Preferir métodos de driver em vez de reconhecimento de data center

O driver fornece métodos wrapper para muitos comandos de banco de dados. Recomendamos usar métodos de driver em vez de executar comandos de banco de dados quando possível.

Para executar tarefas administrativas, use o MongoDB Shell em vez do driver Node.js. Chamar o método db.runCommand() dentro do shell é o método preferido para emitir comandos do banco de dados, pois ele fornece uma interface consistente entre o shell e os drivers.

Para executar um comando de banco de dados, você deve especificar o comando e qualquer em um documento e, em seguida, passe este documento para um método de execução de comandos. O driver Node.js fornece os seguintes métodos para executar comandos do banco de dados:

  • command(), que retorna a resposta do comando como um tipo Document . Você pode usar este método com qualquer reconhecimento de data center de banco de dados.

  • runCursorCommand(), que retorna a resposta do comando como um tipo RunCommandCursor iterável. Você pode usar esse método somente se o reconhecimento de data center retornar vários documento de resultados.

O código a seguir mostra como usar o método command() para executar o comando hello , que retorna informações sobre a role do membro atual no conjunto de réplicas, em um reconhecimento de data center:

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

Para obter uma lista completa dos comandos do banco de dados e dos parâmetros correspondentes, consulte a seção Informações adicionais.

Você pode especificar o comportamento de comando opcional para os métodos command() e runCursorCommand() .

O método command() aceita um objeto RunCommandOptions. Para saber mais sobre o RunCommandOptions tipo, consulte a documentação API.

O runCursorCommand() method aceita um objeto RunCursorCommandOptions . Para saber mais sobre o RunCursorCommandOptions tipo , consulte a documentação API.

A partir da versão 6.0 do driver Node.js, você pode passar apenas as seguintes opções para o método command() :

  • comment

  • enableUtf8Validation

  • raw

  • readPreference

  • session

Você pode definir mais opções no documento que você passa para o método command() . Para saber mais sobre um comando e as opções que ele aceita, localize o comando e siga o link na seção Comandos do banco de dados do manual do servidor MongoDB.

O seguinte código mostra como especificar um comando grantRolesToUser que é executado com uma referência de escrita majority :

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

Observação

readPreference

Os métodos command() e runCursorCommand() ignoram a configuração de preferência de leitura que você pode ter definido no seu objeto Db . Por padrão, esses métodos usam a preferência de leitura primary .

O seguinte código mostra como especificar uma preferência de leitura e passá-la como uma opção para o método command() :

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

Para obter mais informações sobre as opções de read preference, consulte Read preference no manual do servidor MongoDB.

Cada método retorna um objeto Document ou um cursor que contém a resposta do reconhecimento de data center após a execução do comando. Cada reconhecimento de data center executa uma função diferente, portanto, o conteúdo da resposta pode variar entre comandos de banco de dados. No entanto, cada resposta contém documentos com os seguintes campos:

Campo
Descrição

<command result>

Fornece campo específicos para o reconhecimento de data center do banco de dados. Por exemplo, count retorna o campo n e explain retorna o campo queryPlanner .

ok

Indica se o comando foi bem-sucedido (1) ou falhou (0).

operationTime

Indica a hora lógica da operação. O MongoDB usa o tempo lógico para solicitar operações. Para saber mais sobre o tempo lógico, consulte nossa publicação no blog sobre o Relógio Lógico Global.

$clusterTime

Fornece um documento que retorna a hora do cluster assinado. O tempo de cluster é um tempo lógico usado para ordenar operações.

O documento contém os seguintes campos:

  • clusterTime, que é o carimbo de data/hora do cluster mais alto conhecido para o nó.

  • signature, que é um documento que contém o hash da hora do cluster e o ID da chave usada para assinar a hora do cluster.

O código a seguir mostra como você pode usar o método runCursorCommand() para executar o comando checkMetadataConsistency no reconhecimento de data center testDB e iterar através dos 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);
}

A saída contém o conteúdo do objeto cursor. Os documentos descrevem quaisquer inconsistências de metadados no banco de dados:

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

Observação

Se você armazenar a resposta do comando em um cursor, verá apenas os documentos de resultado do comando ao acessar o conteúdo do cursor. Você não verá os campos ok, operationTime e $clusterTime .

Observação

Exemplo de configuração

Esse exemplo se conecta a uma instância do MongoDB usando um URI de conexão. Para saber mais sobre como se conectar à sua instância do MongoDB, consulte o guia Conectar ao MongoDB. Este exemplo também utiliza a coleção do movies no banco de dados do sample_mflix incluído nos conjuntos de dados de amostra do Atlas. Você pode carregá-los em seu banco de dados na camada grátis do MongoDB Atlas seguindo o Guia de Introdução ao Atlas.

Observação

Recursos específicos do No TypeScript

O seguinte exemplo de código utiliza JavaScript. Não existem características específicas do TypeScript do condutor relevantes para este caso de utilização.

No seguinte código de amostra, enviamos o comando dbStats para solicitar estatísticas do banco de dados do 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);

A execução do comando anterior resulta na seguinte saída:

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

Para obter mais informações sobre os conceitos deste guia, consulte a seguinte documentação:

Para saber como recuperar dados de um cursor, consulte a página de fundamentos do Access Data from a Cursor .

Voltar

Indexes

Nesta página