Menu Docs
Página inicial do Docs
/ / /
Driver GO

Executar um comando de banco de dados

Neste guia, você pode aprender como executar um reconhecimento de data center com o driver Go. 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.

Para executar um banco de dados, você deve especificar o reconhecimento de data center e quaisquer parâmetros relevantes em um documento, em seguida, passar o documento para um método wrapper. O documento de comando deve ser um tipo de preservação de ordem, como bson.D. O driver Go fornece os seguintes métodos para executar reconhecimento de data center do banco de dados:

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

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

O código a seguir mostra como usar o método RunCommand() 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:

command := bson.D{{"hello", 1}}
var result bson.M
err = db.RunCommand(context.TODO(), command).Decode(&result)

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

Observação

readPreference

RunCommand() e RunCommandCursor() não obedecem à preferência de leitura que você pode ter definido para o objeto Database em outro lugar do seu código. Você pode definir uma preferência de leitura para a execução do comando passando um objeto RunCmdOptions para qualquer um dos métodos:

opts := options.RunCmd().SetReadPreference(readpref.Primary())
cursor, err := db.RunCommandCursor(context.TODO(), command, opts)

Para obter mais informações sobre as opções de preferência de leitura , consulte a página de fundamentos dasConfigurações de leitura e escrita.

Cada método retorna um objeto SingleResult 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 RunCommand() método para executar o explain comando para uma count operação na flowers collection do reconhecimento de db data center . O comando explain é executado no modo de detalhamento "queryPlanner" :

db := client.Database("db")
// Creates commands to count documents in a collection and explain
// how the count command runs
countCommand := bson.D{{"count", "flowers"}}
explainCommand := bson.D{{"explain", countCommand}, {"verbosity", "queryPlanner"}}
// Retrieves results of the explain command
var result bson.M
err = db.RunCommand(context.TODO(), explainCommand).Decode(&result)

Na saída, você deve ver 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": "db",
"count": "flowers"
},
"explainVersion": "1",
"ok": 1,
"operationTime": {
"T": 1673969525,
"I": 24
},
"queryPlanner": {
"indexFilterSet": false,
"maxIndexedAndSolutionsReached": false,
"maxIndexedOrSolutionsReached": false,
"maxScansToExplodeReached": false,
"namespace": "db.flowers",
"rejectedPlans": [],
"winningPlan": {
"stage": "RECORD_STORE_FAST_COUNT"
}
},
"serverInfo": {...},
"serverParameters": {
"internalDocumentSourceGroupMaxMemoryBytes": 104857600,
...
}
}

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 Como criar um MongoClient. Este exemplo também utiliza o sample_restaurants banco de dados do 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 .

O exemplo a seguir recupera estatísticas sobre o banco de dados sample_restaurants:

// Runs a database command by using the Go driver
package main
import (
"context"
"encoding/json"
"fmt"
"log"
"os"
"github.com/joho/godotenv"
"go.mongodb.org/mongo-driver/v2/bson"
"go.mongodb.org/mongo-driver/v2/mongo"
"go.mongodb.org/mongo-driver/v2/mongo/options"
)
func main() {
if err := godotenv.Load(); err != nil {
log.Println("No .env file found")
}
var uri string
if uri = os.Getenv("MONGODB_URI"); uri == "" {
log.Fatal("You must set your 'MONGODB_URI' environment variable. See\n\t https://www.mongodb.com/pt-br/docs/drivers/go/current/connect/mongoclient/#environment-variable")
}
client, err := mongo.Connect(options.Client().ApplyURI(uri))
if err != nil {
panic(err)
}
defer func() {
if err = client.Disconnect(context.TODO()); err != nil {
panic(err)
}
}()
{
db := client.Database("sample_restaurants")
// Retrieves statistics about the specified database
command := bson.D{{"dbStats", 1}}
var result bson.M
// Runs the command and prints the database statistics
err := db.RunCommand(context.TODO(), command).Decode(&result)
// Prints a message if any errors occur during the command execution
if err != nil {
panic(err)
}
/* When you run this file, it should print something similar to the following:
{
"avgObjSize": 548.4101901854896,
"collections": 2,
"dataSize": 14014074,
"db": "sample_restaurants",
"fileSize": 0,
"indexSize": 286720,
"indexes": 2,
"nsSizeMB": 0,
"numExtents": 0,
"objects": 25554,
"ok": 1,
"storageSize": 8257536,
"totalFreeStorageSize": 0,
"views": 0
}
*/
output, err := json.MarshalIndent(result, "", " ")
if err != nil {
panic(err)
}
fmt.Printf("%s\n", output)
}
}
// results truncated
{
"avgObjSize": 548.4101901854896,
"collections": 2,
"dataSize": 14014074,
"db": "sample_restaurants",
"indexSize": 286720,
...,
}

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