Para interagir com o MongoDB utilizando PHP, o primeiro passo é garantir que a extensão apropriada esteja instalada e configurada em seu ambiente PHP.
Estabelecendo Conexão com o Banco de Dados
A seguir, demonstramos como estabelecer uma conexão com uma instância do MongoDB. Se o banco de dados especificado não existir, ele será automaticamente criado ao tentar acessá-lo.
<?php
try {
$clienteDb = new MongoClient(); // Conecta ao MongoDB local (localhost:27017)
$baseDados = $clienteDb->meuDbAplicacao; // Acessa ou cria o banco de dados 'meuDbAplicacao'
echo "<p>Conexão com o banco de dados 'meuDbAplicacao' estabelecida com sucesso.</p>";
var_dump($baseDados);
} catch (MongoConnectionException $e) {
echo "<p>Erro na conexão com o MongoDB: " . $e->getMessage() . "</p>";
}
?>
Definindo uma Coleção
Após a conexão com o banco de dados, podemos definir coleções. Uma coleção é análoga a uma tabela em bancos de dados relacionais.
<?php
try {
$clienteDb = new MongoClient();
$baseDados = $clienteDb->meuDbAplicacao;
// Cria a coleção 'usuarios' ou a seleciona se já existir
$colecaoUsuarios = $baseDados->createCollection('usuarios');
echo "<p>Coleção 'usuarios' criada ou selecionada com sucesso.</p>";
var_dump($colecaoUsuarios);
} catch (MongoConnectionException $e) {
echo "<p>Erro ao criar coleção: " . $e->getMessage() . "</p>";
}
?>
Inserindo Documentos
Documentos são as unidades de dados armazenadas em uma coleção. Eles são representados como objetos BSON (Binary JSON) e podem ser facilmente manipulados como arrays associativos em PHP.
<?php
try {
$clienteDb = new MongoClient();
$baseDados = $clienteDb->meuDbAplicacao;
$colecaoUsuarios = $baseDados->usuarios; // Acessa a coleção 'usuarios'
// Define um novo documento para inserção
$dadosUsuario = array(
'nome' => 'Alice',
'email' => 'alice@exemplo.com',
'idade' => 30
);
$resultadoInsercao = $colecaoUsuarios->insert($dadosUsuario);
echo "<p>Documento inserido:</p>";
var_dump($resultadoInsercao);
} catch (MongoConnectionException $e) {
echo "<p>Erro ao inserir documento: " . $e->getMessage() . "</p>";
}
?>
A saída esperada para uma inserção bem-sucedida é similar a:
array(4) {
["ok"]=>
float(1)
["n"]=>
int(0)
["err"]=>
NULL
["errmsg"]=>
NULL
}
Consultando Documentos
Para recuperar documentos de uma coleção, utiliza-se o método find(). Sem parâmetros, ele retorna todos os documentos da coleção. O método retorna um objeto MongoCursor, que pode ser iterado.
<?php
try {
$clienteDb = new MongoClient();
$baseDados = $clienteDb->meuDbAplicacao;
$colecaoUsuarios = $baseDados->usuarios;
$cursorDocumentos = $colecaoUsuarios->find();
echo "<p>Documentos encontrados:</p>";
foreach ($cursorDocumentos as $documento) {
var_dump($documento);
}
} catch (MongoConnectionException $e) {
echo "<p>Erro ao buscar documentos: " . $e->getMessage() . "</p>";
}
?>
Um exemplo de documento retornado:
array(4) {
["_id"]=>
object(MongoId)#7 (1) {
["$id"]=>
string(24) "65f3f0e0e1b3c4d5f6a7b8c9"
}
["nome"]=>
string(5) "Alice"
["email"]=>
string(17) "alice@exemplo.com"
["idade"]=>
int(30)
}
Atualizando Documentos
O método update() é empregado para modificar documentos existentes. Ele requer um critério de busca para identificar o(s) documento(s) a serem atualizados e um array de modificadores (como $set) para definir os novos valores.
<?php
try {
$clienteDb = new MongoClient();
$baseDados = $clienteDb->meuDbAplicacao;
$colecaoUsuarios = $baseDados->usuarios;
// Atualiza a idade de 'Alice' para 31
$colecaoUsuarios->update(
array('nome' => 'Alice'), // Critério de busca
array('$set' => array('idade' => 31)) // Novos valores a serem definidos
);
echo "<p>Documento atualizado. Novos dados da coleção:</p>";
$cursorDocumentos = $colecaoUsuarios->find();
foreach ($cursorDocumentos as $documento) {
var_dump($documento);
}
} catch (MongoConnectionException $e) {
echo "<p>Erro ao atualizar documento: " . $e->getMessage() . "</p>";
}
?>
Após a atualização, o documento modificado aparecerá da seguinte forma:
array(4) {
["_id"]=>
object(MongoId)#7 (1) {
["$id"]=>
string(24) "65f3f0e0e1b3c4d5f6a7b8c9"
}
["nome"]=>
string(5) "Alice"
["email"]=>
string(17) "alice@exemplo.com"
["idade"]=>
int(31) // Idade atualizada
}
Removendo Documentos
Para excluir documentos, utilize o método remove(). Ele aceita um critério de busca para determinar quais documentos devem ser removidos. Se nenhum critério for fornecido, todos os documentos da coleção serão excluídos.
<?php
try {
$clienteDb = new MongoClient();
$baseDados = $clienteDb->meuDbAplicacao;
$colecaoUsuarios = $baseDados->usuarios;
// Remove o documento onde o nome é 'Alice'
$colecaoUsuarios->remove(array('nome' => 'Alice'));
echo "<p>Documento removido. Coleção após a remoção:</p>";
$cursorDocumentos = $colecaoUsuarios->find();
foreach ($cursorDocumentos as $documento) {
var_dump($documento); // Nenhum documento será exibido se 'Alice' era o único
}
// Se a coleção estiver vazia, este loop não exibirá nada.
} catch (MongoConnectionException $e) {
echo "<p>Erro ao remover documento: " . $e->getMessage() . "</p>";
}
?>
A assinatura do método remove() é:
public bool|array MongoCollection::remove ([ array $criteria = array() [, array $options = array() ]] )
As opções incluem:
"w": Nível de garantia de escrita. O padrão é1."justOne": Booleano, seTRUE, remove apenas o primeiro documento correspondente. O padrão éFALSE(remove todos)."fsync": Booleano, seTRUE, força a sincronização da escrita para o disco antes de retornar sucesso. Implica uma escrita confirmada e sobrescreve a configuração dewpara0."timeout": Inteiro (em milissegundos). Se "safe" for definido, especifica o tempo que o cliente esperará por uma resposta do banco de dados. UmMongoCursorTimeoutExceptioné lançado se o tempo expirar.
Para detalhes adicionais sobre o driver legado do MongoDB para PHP, consulte a documentação oficial.