Visão geral
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.
Executar um comando
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 tipoSingleResult
. 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 tipoCursor
. 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.
Resposta
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, |
| Indica se o comando foi bem-sucedido ( |
| 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. |
| 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 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)
Saída
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, ... } }
Executar um exemplo de comando: Arquivo Completo
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, ..., }
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 Access Data from a Cursor .