Execute um comando
Visão geral
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 de dados, pois ele fornece uma interface consistente entre o shell e os drivers.
Executar um comando
Para executar um comando de banco de dados, você deve especificar o comando e quaisquer parâmetros relevantes em um documento de comando e, em seguida, passar o documento de comando para um método de execução de comando. O driver Node.js fornece os seguintes métodos para executar comandos de banco de dados:
command()
, que retorna a resposta do comando como um tipoDocument
. 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 tipoRunCommandCursor
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.
Observação
readPreference
command()
e runCursorCommand()
não obedecem à preferência de leitura que você pode ter definido para o objeto Db
em outras partes do código. Por padrão, esses métodos usam a preferência de leitura primary
.
Você pode definir uma read preference para a execução do comando passando um objeto de opções para qualquer um dos métodos. O método command()
usa um objeto RunCommandOptions
e o método runCursorCommand()
usa um objeto RunCursorCommandOptions
.
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.
Resposta
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. DicaVeja também: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:
|
Exemplo
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:
const db = client.db("testDB"); const cursor = await db.runCursorCommand({ checkMetadataConsistency: 1, }); for await (const doc of cursor) { console.log(doc); }
Saída
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
.
Informações adicionais
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 Acessar dados de um cursor .