Operações Essenciais com MongoDB e PHP: Um Guia Prático

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, se TRUE, remove apenas o primeiro documento correspondente. O padrão é FALSE (remove todos).
  • "fsync": Booleano, se TRUE, força a sincronização da escrita para o disco antes de retornar sucesso. Implica uma escrita confirmada e sobrescreve a configuração de w para 0.
  • "timeout": Inteiro (em milissegundos). Se "safe" for definido, especifica o tempo que o cliente esperará por uma resposta do banco de dados. Um MongoCursorTimeoutException é lançado se o tempo expirar.

Para detalhes adicionais sobre o driver legado do MongoDB para PHP, consulte a documentação oficial.

Tags: mongodb PHP nosql database CRUD

Publicado em 7-13 01:44