Execute um comando
Nesta página
Visão geral
Neste guia, você pode aprender como usar o driver Rust para executar um reconhecimento de data center. Você pode usar banco de dados para executar uma variedade de tarefas administrativas e de diagnóstico, como buscar estatísticas do servidor, inicializar um conjunto de réplicas ou executar um reconhecimento de data center de agregação.
Este guia inclui as seguintes seções:
Executar um comando descreve a sintaxe e o comportamento dos métodos
run_command()
erun_cursor_command()
Resposta descreve as informações que os métodos de execução do comando retornam
Exemplo de comando fornece um exemplo de comando e descreve a saída para o comando
Informações adicionais fornecem links para recursos e documentação da API para os tipos e métodos mencionados neste guia
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 Rust. Chamar o método db.runCommand()
dentro do shell é a maneira preferida de emitir comandos do banco de dados, pois ele fornece uma interface consistente entre o shell e os drivers.
Executar um comando
Para executar um reconhecimento de data center, você deve especificar o banco de dados e quaisquer parâmetros relevantes em um documento e, em seguida, passar o documento para um método de execução de banco de dados. O driver Rust fornece os seguintes métodos para executar comandos do banco de dados:
run_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.run_cursor_command()
, que retorna a resposta do comando como um tipoCursor
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 run_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:
let result = my_db.run_command(doc! { "hello": 1 }).await?;
O comando checkMetadataConsistency
retorna vários documentos de resultados. Você pode utilizar o método run_cursor_command()
para executar este comando e coletar os resultados, como mostrado no seguinte código:
let cursor = my_db .run_cursor_command(doc! { "checkMetadataConsistency": 1 }) .await?;
Para encontrar um link para uma lista completa de comandos de banco de dados e parâmetros correspondentes, consulte a seção Informações adicionais.
Observação
readPreference
Os métodos run_command()
e run_cursor_command()
não obedecem à preferência de leitura que você pode ter definido para o objeto Database
em outro lugar do seu código. Por padrão, eles usam a preferência de leitura primary
.
Você pode definir uma preferência de leitura para a execução do comando, encadeando o método selection_criteria()
a run_command()
ou run_cursor_command()
. O código a seguir mostra como especificar uma preferência de leitura em uma instância SelectionCriteria
e passá-la como parâmetro para o método selection_criteria()
:
let result = my_db .run_command(doc! { "hello": 1 }) .selection_criteria(SelectionCriteria::ReadPreference(ReadPreference::Primary)) .await?;
Para definir uma preferência de leitura para o método run_cursor_command()
, use a mesma sintaxe do exemplo anterior.
Para obter mais informações sobre as opções de read preference, consulte Read preference no manual do servidor MongoDB.
Resposta
O método run_command()
retorna um objeto Document
que contém a resposta do reconhecimento de data center após a execução do comando. O run_cursor_command()
retorna um Cursor
que faz referência a vários documentos de resultado.
Cada reconhecimento de data center executa uma função diferente, portanto, o conteúdo da resposta pode variar dependendo do banco de dados executado. No entanto, cada resposta contém um documento com os seguintes campos:
Campo | Descrição |
---|---|
<command result> | Campos específicos para o comando do banco de dados. Por exemplo, count retorna o campo n e explain retorna o campo queryPlanner . |
ok | Se o comando foi bem-sucedido ( 1 ) ou falhou (0 ). |
operationTime | 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 | Um documento que contém o tempo de cluster assinado. O tempo do cluster é um tempo lógico usado para ordenar operações. Este documento contém os seguintes campos:
|
Exemplo de comando
O código a seguir mostra como você pode usar o run_command()
método para executar o explain
comando para uma count
operação na flowers
collection do reconhecimento de plants
data center . O comando explain
é executado no modo de detalhamento "queryPlanner"
:
let my_db = client.database("plants"); let count_command = doc! { "count": "flowers" }; let explain_command = doc! { "explain": count_command, "verbosity": "queryPlanner" }; let result = my_db.run_command(explain_command).await?;
Saída
O resultado inclui campos explicando a execução da operação count
, como o plano vencedor, que é o plano selecionado pelo otimizador de query e quaisquer planos rejeitados. A saída também contém informações sobre a execução do comando explain
:
{ "$clusterTime": { "clusterTime": { "T": 1673969525, "I": 24 }, "signature": {...} }, "command": { "$db": "plants", "count": "flowers" }, "explainVersion": "1", "ok": 1, "operationTime": { "T": 1673969525, "I": 24 }, "queryPlanner": { "indexFilterSet": false, "maxIndexedAndSolutionsReached": false, "maxIndexedOrSolutionsReached": false, "maxScansToExplodeReached": false, "namespace": "plants.flowers", "rejectedPlans": [], "winningPlan": { "stage": "RECORD_STORE_FAST_COUNT" } }, "serverInfo": {...}, "serverParameters": { "internalDocumentSourceGroupMaxMemoryBytes": 104857600, ... } }
Informações adicionais
Para obter mais informações sobre os conceitos deste guia, consulte a seguinte documentação no manual do servidor: