Executar um comando de banco de dados
Nesta página
Visão geral
Neste guia, você pode aprender como usar o driver Scala para executar um comando de banco de dados. 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 , inicializar um conjunto de réplicas ou executar 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 . Se possível, recomendamos usar esses métodos em vez de executar comandos de banco de dados .
Para executar tarefas administrativas, use o shell do MongoDB em vez do driver Scala. O shell fornece métodos assistente que podem não estar disponíveis no driver.
Se não houver auxiliares disponíveis no driver ou no shell, você poderá usar o método de shell db.runCommand()
ou o método runCommand()
do driver, descrito neste guia.
Dados de amostra
Os exemplos neste guia usam o sample_restaurants
banco de dados dos conjuntos de dados de amostra do Atlas . Para acessar esse banco de dados a partir do seu aplicação Scala, crie um MongoClient
que se conecte a um Atlas cluster e atribua o seguinte valor à sua variável database
:
val database: MongoDatabase = mongoClient.getDatabase("sample_restaurants")
Para saber como criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte o guia Iniciar com Atlas .
Executar um comando
Para executar um comando de banco de dados, crie um objeto Document
que especifique o comando e passe-o como um parâmetro para o método runCommand()
. Este método retorna uma instância SingleObservable
e você pode se inscrever neste observavel para executar o comando e acessar o resultado do comando.
O exemplo a seguir chama o método runCommand()
em um banco de dados para executar o comando hello
, que retorna informações sobre o servidor:
database.runCommand(Document("hello" -> 1)) .subscribe((doc: Document) => ())
Dica
Para ver uma lista completa de comandos de banco de dados e seus parâmetros correspondentes, veja Comandos de banco de dados no manual do MongoDB Server .
Definir uma preferência de leitura
O método runCommand()
não herda a preferência de leitura que você pode ter definido na sua instância do MongoDatabase
. Por padrão, o runCommand()
utiliza a preferência de leitura primary
.
Você pode definir uma preferência de leitura para a execução do comando passando uma instância ReadPreference
como parâmetro para runCommand()
, conforme mostrado no código a seguir:
database.runCommand(Document("hello" -> 1), ReadPreference.secondary()) .subscribe((doc: Document) => ())
Dica
Para saber mais sobre as opções de preferência de leitura , consulte Read preference no manual do MongoDB Server .
Resposta
O método runCommand()
retorna um SingleObservable
que contém a resposta do banco de dados para o comando fornecido. Você pode chamar o método subscribe()
no observable para executar o comando e acessar a resposta como um documento.
O documento bruto de resposta do comando contém os seguintes campos:
Campo | Descrição |
---|---|
| Campos específicos do comando de banco de dados de dados. Por exemplo, o comando |
| Indica se o comando foi bem-sucedido ( |
| Um documento que contém o tempo de cluster assinado. O tempo do cluster é um tempo lógico usado para ordenar operações. Este campo se aplica somente a comandos executados em conjuntos de réplicas ou cluster fragmentado. |
| A hora lógica da execução da operação. Este campo se aplica somente a comandos executados em conjuntos de réplicas ou cluster fragmentado. |
Dica
Para saber mais sobre o tempo lógico, consulte o verbete da Wikipedia sobre o relógio lógico.
Exemplo
O exemplo a seguir executa o comando dbStats
para recuperar estatísticas de armazenamento para o banco de dados sample_restaurants
e, em seguida, imprime os resultados do comando:
database.runCommand(Document("dbStats" -> 1)) .subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
A saída desse comando inclui informações sobre os dados armazenados no banco de dados, conforme mostrado no código a seguir:
{"db": "sample_restaurants", "collections": 4, "views": 0, "objects": 18767, "avgObjSize": 596.1911866574306, "dataSize": 11188720, "storageSize": 7528448, "totalFreeStorageSize": 0, "numExtents": 0, "indexes": 6, "indexSize": 1519616, "indexFreeStorageSize": 0, "fileSize": 0, "nsSizeMB": 0, "ok": 1}
Informações adicionais
Para obter mais informações sobre os conceitos deste guia, consulte a seguinte documentação no manual do MongoDB Server :
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: