Menu Docs
Página inicial do Docs
/ / /
PyMongo

Executar um comando de banco de dados

Nesta página

  • Visão geral
  • Executar um comando
  • Cursor de comando
  • Exemplo de comando
  • Informações adicionais
  • Documentação da API

Neste guia, você pode aprender como usar o PyMongo para executar um comando de banco de dados de dados. Você pode usar comandos de banco de dados 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 biblioteca a comandos de banco de dados

A biblioteca fornece métodos wrapper para muitos comandos de banco de dados de dados. Recomendamos usar esses métodos em vez de executar comandos do banco de dados de dados quando possível.

Para executar tarefas administrativas, use o shell do shell MongoDB em vez do PyMongo PyMongo. O shell fornece métodos assistente que podem não estar disponíveis no driver.

Se não houver auxiliares disponíveis na biblioteca ou no shell, você poderá usar o método shell db.runCommand() ou o método command() do driver, descrito neste guia.

Você pode utilizar o método command() para executar um comando de banco de dados de dados. Você deve especificar o comando e quaisquer argumentos relevantes. Se o comando for simples, eles podem ser passados como strings. Caso contrário, eles podem ser passados como um objeto dict. O método retornará o resultado do comando que foi executado.

O seguinte código mostra como você pode utilizar o método command() em um Database para executar o comando hello, que retorna informações sobre o servidor:

database = client.get_database("my_db")
hello = database.command("hello")
print(hello)
{
'topologyVersion': {
'processId': ObjectId('6724d211d6b98fa1931e8616'),
'counter': 6
},
'hosts': ['cluster0-shard-00-00.fxoii.mongodb.net:27017',
'cluster0-shard-00-01.fxoii.mongodb.net:27017',
'cluster0-shard-00-02.fxoii.mongodb.net:27017'],
'setName': 'atlas-13l6uw-shard-0',
'setVersion': 114,
'isWritablePrimary': True,
'secondary': False,
'primary': 'cluster0-shard-00-02.fxoii.mongodb.net:27017',
'tags': {
'workloadType': 'OPERATIONAL',
'diskState': 'READY',
'region': 'US_EAST_1',
'provider': 'AWS',
'nodeType': 'ELECTABLE',
'availabilityZone': 'use1-az5'
},
'me': 'cluster0-shard-00-02.fxoii.mongodb.net:27017',
'electionId': ObjectId('7fffffff00000000000000e3'),
'lastWrite': {
'opTime': {
'ts': Timestamp(1730486145, 22),
't': 227
},
'lastWriteDate': datetime.datetime(2024, 11, 1, 18, 35, 45),
'majorityOpTime': {
'ts': Timestamp(1730486145, 22),
't': 227
},
'majorityWriteDate': datetime.datetime(2024, 11, 1, 18, 35, 45)
},
'maxBsonObjectSize': 16777216,
'maxMessageSizeBytes': 48000000,
'maxWriteBatchSize': 100000,
'localTime': datetime.datetime(2024, 11, 1, 18, 35, 45, 309000),
'logicalSessionTimeoutMinutes': 30,
'connectionId': 23889,
'minWireVersion': 0,
'maxWireVersion': 21,
'readOnly': False,
'ok': 1.0,
'$clusterTime': {
'clusterTime': Timestamp(1730486145, 22),
'signature': {
'hash': b"\x1a\xf7{>q%F\xc2\x89\x15\x13W29\x91\xaae'~\xe4",
'keyId': 7379292132843978793
}
},
'operationTime': Timestamp(1730486145, 22)
}

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

O método command() retorna o resultado do comando que foi executado. Você também pode usar o cursor_command() método, que emite um comando MongoDB e analisa a resposta como um CommandCursor. O CommandCursor pode ser utilizado para iterar sobre os resultados do comando.

O exemplo seguinte utiliza o método cursor_command() no banco de banco de dados sample_mflix. Ele executa o comando find na collection movies para filtrar por documentos nos quais o campo runtime tem valor de 11.

database = client.get_database("sample_mflix")
result = database.cursor_command("find", "movies", filter={"runtime": 11})
print(result.to_list())
{
'_id': ObjectId('573a1390f29313caabcd42e8'),
'runtime': 11,
'title': 'The Great Train Robbery',
...
},
{
{'_id': ObjectId('573a1394f29313caabce0f10'),
'runtime': 11,
'title': 'Glas',
...
},
...

Para saber mais sobre o formato de resposta do comando, consulte Comandos do banco de dados.

Observação

readPreference

Os métodos command() e cursor_command() não obedecem à preferência de leitura que você pode ter definido em sua instância Database em outras partes do seu código. Se uma ClientSession for fornecida usando o session parâmetro e essa sessão estiver em uma transação, a preferência de leitura do comando será definida como a preferência de leitura da transação. Caso contrário, a preferência de leitura do comando será padronizada como PRIMARY.

Você pode definir uma preferência de leitura para a execução do comando usando o parâmetro read_preference, conforme mostrado no código a seguir:

from pymongo.read_preferences import Secondary
database = client.get_database("my_db")
hello = database.command("hello", read_preference=Secondary())
print(hello)

Saiba mais sobre o read_preferences módulo na documentação da API.

Para saber mais sobre as opções de preferência de leitura , consulte Read preference no manual do MongoDB Server .

O exemplo seguinte utiliza o método command() para executar o comando dbStats para recuperar estatísticas de armazenamento para o banco de banco de dados do sample_mflix :

database = client.get_database("sample_mflix")
result = database.command("dbStats")
print(result)
{'db': 'sample_mflix', 'collections': 9, 'views': 1, 'objects': 67662,
'avgObjSize': 1796.788182436227, 'dataSize': 121574282, 'storageSize': 97779712,
'totalFreeStorageSize': 0, 'numExtents': 0, 'indexes': 13, 'indexSize': 19423232,
'indexFreeStorageSize': 0, 'fileSize': 0, 'nsSizeMB': 0, 'ok': 1}

A saída desse comando inclui informações sobre as collections no banco de dados de dados e descreve a quantidade e o tamanho dos dados armazenados nas collections.

Para obter mais informações sobre os conceitos deste guia, consulte a seguinte documentação no manual do MongoDB Server :

Para obter mais informações sobre os métodos command() e cursor_command(), consulte a seguinte documentação da API do PyMongo:

Voltar

Monitorar alterações de dados