Menu Docs
Página inicial do Docs
/ / /
Manual da Biblioteca PHP
/

Executar comandos de banco de dados

Nesta página

  • Visão geral
  • Comandos que retornam um único documento de resultado
  • Comandos que geram vários resultados
  • Especificando uma preferência de leitura personalizada

A Biblioteca PHP MongoDB fornece métodos de ajuda nas classes Client, Database e Collection paracomandos de banco de dados comuns. Além disso, o método MongoDB\Database::command() pode ser utilizado para executar comandos de banco de dados que não têm um método auxiliar.

O método MongoDB\Database::command() sempre retorna um MongoDB\Driver\Cursor objeto, pois ele deve suportar a execução de comandos que retornam documentos de resultado único e vários resultados por meio de um cursor de comando.

A maioria dos comandos de banco de dados retorna um único documento de resultado, que pode ser obtido convertendo o cursor retornado em uma array e acessando seu primeiro elemento. O exemplo a seguir executa um comando ping e imprime seu documento de resultado:

<?php
$database = (new MongoDB\Client)->test;
$cursor = $database->command(['ping' => 1]);
var_dump($cursor->toArray()[0]);

A saída se assemelha a:

object(MongoDB\Model\BSONDocument)#11 (1) {
["storage":"ArrayObject":private]=>
array(1) {
["ok"]=>
float(1)
}
}

Alguns comandos do banco de dados retornam um cursor com múltiplos resultados. O exemplo a seguir executa listCollections, que retorna um cursor contendo um documento de resultado para cada collection no banco de dados test e itera pelos resultados usando um loop foreach . Observe que este exemplo é ilustrativo; os aplicativos geralmente usariam MongoDB\Database::listCollections() na prática.

<?php
$database = (new MongoDB\Client)->test;
$cursor = $database->command(['listCollections' => 1]);
foreach ($cursor as $collection) {
echo $collection['name'], "\n";
}

O resultado pode se assemelhar ao seguinte:

persons
posts
zips

Observação

No nível do protocolo , os comandos que geram vários resultados por meio de um cursor retornarão um único documento de resultado com os componentes essenciais para a construção do cursor (ou seja, o ID do cursor, o namespace e um primeiro lote opcional de resultados). Se o MongoDB\Driver\Manager::executeCommand() método na extensão detecta tal resposta, ele construirá um cursor de comando iterável e o retornará em vez do documento de resultado bruto. Se necessário, os documentos de resultados brutos ainda podem ser observados usando o monitoramento de comandos .

Comandos de gravação, como createUser, só podem ser executados em um servidor gravável (por exemplo, membro primário do conjunto de réplicas). Os métodos auxiliares de comando na Biblioteca PHP do MongoDB, como MongoDB\Database::drop(), sabe como aplicar sua própria read preference, se necessário. No entanto, o método MongoDB\Database::command() é um método genérico e tem como padrão a read preference do objeto de banco de dados no qual ele é invocado. Quando necessário, a opção readPreference pode ser usada para substituir a preferência de leitura padrão.

O exemplo a seguir se conecta a um cluster e especifica secondaryPreferred como a preferência de leitura padrão do cliente. Em seguida, ele especifica uma preferência de leitura primary ao executar o comando createUser no reconhecimento de data center test :

<?php
$client = new MongoDB\Client(
'mongodb+srv://cluster0.example.com',
['readPreference' => 'secondaryPreferred']
);
$client->test;
$cursor = $db->command(
[
'createUser' => 'username',
'pwd' => 'password',
'roles' => ['readWrite'],
],
[
'readPreference' => new MongoDB\Driver\ReadPreference('primary'),
]
);
var_dump($cursor->toArray()[0]);

A saída seria então semelhante a:

object(MongoDB\Model\BSONDocument)#8 (1) {
["storage":"ArrayObject":private]=>
array(1) {
["ok"]=>
float(1)
}
}

Voltar

Agrupamentos

Próximo

Personalizar tipos de dados