Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Junte-se a nós no Amazon Web Services re:Invent 2024! Saiba como usar o MongoDB para casos de uso de AI .
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Idiomaschevron-right
PHPchevron-right

Criar, ler, atualizar e excluir documentos MongoDB com PHP

Michael Lynn8 min read • Published Feb 05, 2022 • Updated Sep 11, 2024
MongoDBPHP
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Início rápido
star-empty
star-empty
star-empty
star-empty
star-empty
Emblema PHP
Bem-vindo à parte 2 deste guia de início rápido para MongoDB e PHP. No artigo anterior, descrevi o processo de instalação, configuração e configuração do PHP, do Apache e do driver e da extensão do MongoDB para que você possa começar efetivamente a criar um aplicativo usando a pilha do PHP e MongoDB.
É altamente recomendável visitar o primeiro artigo desta série para ser configurado corretamente, caso você não tenha instalado anteriormente o PHP e o Apache.
Criei cada seção com amostras de código. E estou certo de que me pareço com você no sentido de queadoro quando um tutorial inclui exemplos autônomos... Eles podem ser copiados/coledos e testados rapidamente. Portanto, procurei garantir que cada exemplo fosse criado de forma pronta para ser executada.
Essas amostras estão disponíveis neste repositórioe cada amostra de código é um programa independente que você pode executar por si só. Para executar as amostras, você precisará ter instalado o PHP, versão 8 e você precisará ser capaz de instalar bibliotecas PHP adicionais utilizando Compose. Todas essas etapas são abordadas no primeiro artigo desta série.
Além disso, embora eu aborde esse assunto neste artigo, vale a pena mencionar antecipadamente que você precisará criar e usar um arquivo.envcom suas credenciais e o nome do servidor do seu cluster do MongoDB Atlas.
Este guia está organizado em algumas seções em alguns artigos. Este primeiro artigo aborda a instalação e a configuração do seu ambiente de desenvolvimento. PHP é uma linguagem de desenvolvimento web integrada. Há vários componentes que você normalmente usa em conjunto com a linguagem de programação PHP.
Introdução e visão geral do vídeo
Vamos começar com uma visão geral do que abordaremos neste artigo.

Conectando-se a uma instância de banco de dados MongoDB

Para se conectar a um cluster do MongoDB Atlas, use a string de conexão do Atlas para seu cluster:
1<?php
2
3$client = new MongoDB\Client(
4 'mongodb+srv://<username>:<password>@<cluster-address>/test?w=majority'
5);
6$db = $client->test;
Apenas uma observação sobre o idioma. Neste artigo, usamos o termo create e insert forma intercambiável. Estes dois termos são sinônimos. Anteriormente, o ato de adicionar dados a um banco de dados era conhecido como CREATING. Portanto, a sigla CRUD significa Criar, Ler, Atualizar e Excluir. Apenas saiba que quando usamos criar ou inserir, queremos dizer a mesma coisa.

Proteção de informações de autenticação confidenciais com DotEnv (.env)

Quando nos conectamos ao MongoDB, precisamos especificar nossas credenciais como parte da connection string. Você pode codificar esses valores em seus programas, mas quando você confirma seu código em um repositório de código-fonte, está expondo suas credenciais a quem quer que seja que você dê acesso a esse repositório. Se você estiver trabalhando com código aberto, isso significa que o mundo tem acesso às suas credenciais. Esta não é uma boa ideia. Portanto, para proteger suas credenciais, nós as armazenamos em um arquivo que não não são verificados em seu repositório de código-fonte. A prática comum exige que armazenemos essas informações apenas no ambiente. Um método comum de fornecer esses valores para o ambiente de execução do seu programa é colocar credenciais e outros dados confidenciais em um arquivo.env.
A seguir está um arquivo de ambiente de exemplo que uso para os exemplos deste tutorial.
1MDB_USER="yourusername"
2MDB_PASS="yourpassword"
3ATLAS_CLUSTER_SRV="mycluster.zbcul.mongodb.net"
Para criar seu próprio arquivo de ambiente, crie um arquivo chamado .env na raiz do seu diretório de programa. Você pode simplesmente copiar o arquivo de ambiente de exemplo que forneci e renomeá-lo para .env. Certifique-se de substituir os valores no arquivo yourusername, yourpassworde mycluster.zbcul.mongodb.net pelos seus.
Depois que o arquivo de ambiente estiver em vigor, você poderá usar Composer para instalar a biblioteca DotEnv, o que nos permitirá ler essas variáveis no ambiente do nosso programa. Consulte o primeiro artigo desta série para obter instruções de configuração adicionais.
1$ composer require vlucas/phpdotenv
Depois de instalada, você pode incorporar essa biblioteca ao seu código para extrair os valores do seu arquivo.env.
1$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
2$dotenv->load();
Em seguida, você poderá referenciar os valores do arquivo.env utilizando a array$_ENV[]como esta:
1echo $_ENV['MDB_USER'];
Veja os exemplos de código abaixo para ver isso em ação.

Criando ou inserindo um único documento MongoDB com PHP

O método MongoDBCollection::insertOne() insere um único documento no MongoDB e retorna uma instância de MongoDBInsertOneResult, que você pode usar para acessar o ID do documento inserido.
O seguinte exemplo de código insere um documento na coleção de usuários no banco de dados de teste:
1<?php
2
3require_once __DIR__ . '/vendor/autoload.php';
4$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
5$dotenv->load();
6
7$client = new MongoDB\Client(
8 'mongodb+srv://'.$_ENV['MDB_USER'].':'.$_ENV['MDB_PASS'].'@'.$_ENV['ATLAS_CLUSTER_SRV'].'/test'
9);
10
11$collection = $client->test->users;
12
13$insertOneResult = $collection->insertOne([
14 'username' => 'admin',
15 'email' => 'admin@example.com',
16 'name' => 'Admin User',
17]);
18
19printf("Inserted %d document(s)\n", $insertOneResult->getInsertedCount());
20
21var_dump($insertOneResult->getInsertedId());
Você deverá ver algo semelhante a:
1Inserted 1 document(s)
2object(MongoDB\BSON\ObjectId)#11 (1) {
3 ["oid"]=>
4 string(24) "579a25921f417dd1e5518141"
5}
A saída inclui a ID do documento inserido.

Criando ou inserindo vários documentos MongoDB com PHP

O método MongoDBCollection::insertMany() permite inserir vários documentos em uma operação de escrita e retorna uma instância do MongoDBInsertManyResult, que você pode usar para acessar as IDs dos documentos inseridos.
O código de exemplo a seguir insere dois documentos na coleta de usuários no banco de dados de teste:
1<?php
2
3require_once __DIR__ . '/vendor/autoload.php';
4$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
5$dotenv->load();
6
7$client = new MongoDB\Client(
8 'mongodb+srv://'.$_ENV['MDB_USER'].':'.$_ENV['MDB_PASS'].'@'.$_ENV['ATLAS_CLUSTER_SRV'].'/test'
9);
10
11$collection = $client->test->users;
12
13$insertManyResult = $collection->insertMany([
14 [
15 'username' => 'admin',
16 'email' => 'admin@example.com',
17 'name' => 'Admin User',
18 ],
19 [
20 'username' => 'test',
21 'email' => 'test@example.com',
22 'name' => 'Test User',
23 ],
24]);
25
26printf("Inserted %d document(s)\n", $insertManyResult->getInsertedCount());
27
28var_dump($insertManyResult->getInsertedIds());
Você deverá ver algo semelhante a isto:
1Inserted 2 document(s)
2array(2) {
3[0]=>
4 object(MongoDB\BSON\ObjectId)#18 (1) {
5 ["oid"]=>
6 string(24) "6037b861301e1d502750e712"
7 }
8 [1]=>
9 object(MongoDB\BSON\ObjectId)#21 (1) {
10 ["oid"]=>
11 string(24) "6037b861301e1d502750e713"
12 }
13}

Lendo documentos com PHP

A leitura de documentos de um banco de MongoDB database pode ser realizada de várias maneiras, mas a mais simples é usar o comando$collection->find().
1function find($filter = [], array $options = []): MongoDB\Driver\Cursor
Leia mais sobre o comando find em PHP aqui:.
O código de exemplo a seguir especifica os critérios de pesquisa para os documentos que queremos encontrar na collectionrestaurantsdo de dadossample_restaurants. Para usar esse exemplo, consulte Conjuntos de dados de amostra disponíveis para Atlas clusters.
1<?php
2
3//
4// This example uses data from the Sample Datasets in MongoDB Atlas
5// To load, and use this sample data, see https://docs.atlas.mongodb.com/sample-data/available-sample-datasets/
6//
7
8require_once __DIR__ . '/vendor/autoload.php';
9$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
10$dotenv->load();
11
12$client = new MongoDB\Client(
13 'mongodb+srv://'.$_ENV['MDB_USER'].':'.$_ENV['MDB_PASS'].'@'.$_ENV['ATLAS_CLUSTER_SRV'].'/sample_restaurants'
14);
15
16$collection = $client->sample_restaurants->restaurants;
17
18$cursor = $collection->find(
19 [
20 'cuisine' => 'Italian',
21 'borough' => 'Manhattan',
22 ],
23 [
24 'limit' => 5,
25 'projection' => [
26 'name' => 1,
27 'borough' => 1,
28 'cuisine' => 1,
29 ],
30 ]
31);
32
33foreach ($cursor as $restaurant) {
34 var_dump($restaurant);
35};
Você deverá ver algo semelhante à seguinte saída:
1object(MongoDB\Model\BSONDocument)#20 (1) {
2["storage":"ArrayObject":private]=>
3 array(4) {
4 ["_id"]=>
5 object(MongoDB\BSON\ObjectId)#26 (1) {
6 ["oid"]=>
7 string(24) "5eb3d668b31de5d588f42965"
8 }
9 ["borough"]=>
10 string(9) "Manhattan"
11 ["cuisine"]=>
12 string(7) "Italian"
13 ["name"]=>
14 string(23) "Isle Of Capri Resturant"
15 }
16}
17object(MongoDB\Model\BSONDocument)#19 (1) {
18["storage":"ArrayObject":private]=>
19 array(4) {
20 ["_id"]=>
21 object(MongoDB\BSON\ObjectId)#24 (1) {
22 ["oid"]=>
23 string(24) "5eb3d668b31de5d588f42974"
24 }
25 ["borough"]=>
26 string(9) "Manhattan"
27 ["cuisine"]=>
28 string(7) "Italian"
29 ["name"]=>
30 string(18) "Marchis Restaurant"
31 }
32}
33object(MongoDB\Model\BSONDocument)#26 (1) {
34["storage":"ArrayObject":private]=>
35 array(4) {
36 ["_id"]=>
37 object(MongoDB\BSON\ObjectId)#20 (1) {
38 ["oid"]=>
39 string(24) "5eb3d668b31de5d588f42988"
40 }
41 ["borough"]=>
42 string(9) "Manhattan"
43 ["cuisine"]=>
44 string(7) "Italian"
45 ["name"]=>
46 string(19) "Forlinis Restaurant"
47 }
48}
49object(MongoDB\Model\BSONDocument)#24 (1) {
50["storage":"ArrayObject":private]=>
51 array(4) {
52 ["_id"]=>
53 object(MongoDB\BSON\ObjectId)#19 (1) {
54 ["oid"]=>
55 string(24) "5eb3d668b31de5d588f4298c"
56 }
57 ["borough"]=>
58 string(9) "Manhattan"
59 ["cuisine"]=>
60 string(7) "Italian"
61 ["name"]=>
62 string(22) "Angelo Of Mulberry St."
63 }
64}
65object(MongoDB\Model\BSONDocument)#20 (1) {
66["storage":"ArrayObject":private]=>
67 array(4) {
68 ["_id"]=>
69 object(MongoDB\BSON\ObjectId)#26 (1) {
70 ["oid"]=>
71 string(24) "5eb3d668b31de5d588f42995"
72 }
73 ["borough"]=>
74 string(9) "Manhattan"
75 ["cuisine"]=>
76 string(7) "Italian"
77 ["name"]=>
78 string(8) "Arturo'S"
79 }
80}

Atualizando documentos com PHP

A atualização de documentos envolve usar o que aprendemos na seção anterior para encontrar e transmitir os parâmetros necessários para especificar as alterações que gostaríamos que fossem refletidas nos documentos que correspondam ao critério específico.
Há dois comandos específicos no vocabulário do driver PHP que nos permitirão update documentos.
  • MongoDB\Collection::updateOne - Atualize, no máximo, um documento que corresponda aos critérios de filtro. Se vários documentos corresponderem aos critérios de filtro, somente o primeiro documento correspondente será atualizado.
  • MongoDB\Collection::updateMany - Atualize todos os documentos que correspondem aos critérios de filtro.
Esses dois funcionam de maneira muito semelhante, com a exceção óbvia em torno do número de documentos afetados.
Vamos começar com MongoDB\Collection::updateOne. A amostra de códigoa seguir encontra um único documento com base em um conjunto de critérios que passamos em um documento e nos valores$setnesse único documento.
1<?php
2
3require_once __DIR__ . '/vendor/autoload.php';
4$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
5$dotenv->load();
6
7$client = new MongoDB\Client(
8 'mongodb+srv://'.$_ENV['MDB_USER'].':'.$_ENV['MDB_PASS'].'@'.$_ENV['ATLAS_CLUSTER_SRV'].'/sample_restaurants'
9);
10
11$collection = $client->sample_restaurants->restaurants;
12
13$updateResult = $collection->updateOne(
14 [ 'restaurant_id' => '40356151' ],
15 [ '$set' => [ 'name' => 'Brunos on Astoria' ]]
16);
17
18printf("Matched %d document(s)\n", $updateResult->getMatchedCount());
19printf("Modified %d document(s)\n", $updateResult->getModifiedCount());
Você deverá ver algo semelhante à seguinte saída:
1Matched 1 document(s)
2Modified 1 document(s)
Agora, vamos explorar a atualização de vários documentos em uma única execução de comando.
A seguinte amostra de código atualiza todos os documentos com o bairro de "Queens", definindo o campo ativo como verdadeiro:
1<?php
2
3require_once __DIR__ . '/vendor/autoload.php';
4$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
5$dotenv->load();
6
7$client = new MongoDB\Client(
8 'mongodb+srv://'.$_ENV['MDB_USER'].':'.$_ENV['MDB_PASS'].'@'.$_ENV['ATLAS_CLUSTER_SRV'].'/sample_restaurants'
9);
10
11$collection = $client->sample_restaurants->restaurants;
12
13$updateResult = $collection->updateMany(
14 [ 'borough' => 'Queens' ],
15 [ '$set' => [ 'active' => 'True' ]]
16);
17
18printf("Matched %d document(s)\n", $updateResult->getMatchedCount());
19printf("Modified %d document(s)\n", $updateResult->getModifiedCount());
Você deverá ver algo semelhante a isto:
1Matched 5656 document(s)
2Modified 5656 document(s)
Ao atualizar dados em seu MongoDB database, é importante considerar write concern. A write concern descreve o nível de confirmação solicitado ao MongoDB para operações de escrita em mongodstandalone, conjuntos de réplicas ou clusters fragmentados.
Para entender o valor atual da write concern, tente o seguinte código de exemplo:
1$collection = (new MongoDB\Client)->selectCollection('test', 'users', [
2 'writeConcern' => new MongoDB\Driver\WriteConcern(1, 0, true),
3]);
4
5var_dump($collection->getWriteConcern());
Consulte https://docs.mongodb.com/manual/reference/write-concern/ para obter mais informações sobre write concern.

Excluindo documentos com PHP

Assim como na atualização e localização de documentos, você pode excluir um único documento ou vários documentos do banco de dados.
  • MongoDB\Collection::deleteOne - Exclui, no máximo, um documento que corresponda aos critérios de filtro. Se vários documentos corresponderem aos critérios de filtro, somente o primeiro documento correspondente será excluído.
  • MongoDB\Collection::deleteMany - Exclui todos os documentos que correspondem aos critérios de filtro.
Vamos começar excluindo um único documento.
A seguinte amostra de código exclui um documento na collection de usuários que tem "ny" como o valor do campo de estado:
1<?php
2
3//
4// This example uses data from the Sample Datasets in MongoDB Atlas
5// To load, and use this sample data, see https://docs.atlas.mongodb.com/sample-data/available-sample-datasets/
6//
7
8require_once __DIR__ . '/vendor/autoload.php';
9$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
10$dotenv->load();
11
12$client = new MongoDB\Client(
13 'mongodb+srv://'.$_ENV['MDB_USER'].':'.$_ENV['MDB_PASS'].'@'.$_ENV['ATLAS_CLUSTER_SRV'].'/sample_restaurants'
14);
15
16$collection = $client->sample_restaurants->restaurants;
17
18$deleteResult = $collection->deleteOne(['cuisine' => 'Hamburgers']);
19
20printf("Deleted %d document(s)\n", $deleteResult->getDeletedCount());
Você deverá ver algo semelhante à seguinte saída:
1Deleted 1 document(s)
Você notará, se examinar o banco de dadossample_restaurants, que há muitos documentos correspondentes aos critérios { "cuisine": "Hamburgers" }. No entanto, apenas um documento foi excluído.
A exclusão de vários documentos é possível usando MongoDB\Collection::deleteMany. O exemplo de código a seguir mostra como usar odeleteMany.
1<?php
2
3 //
4 // This example uses data from the Sample Datasets in MongoDB Atlas
5 // To load, and use this sample data, see https://docs.atlas.mongodb.com/sample-data/available-sample-datasets/
6 //
7
8 require_once __DIR__ . '/vendor/autoload.php';
9 $dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
10 $dotenv->load();
11
12 $client = new MongoDB\Client(
13 'mongodb+srv://'.$_ENV['MDB_USER'].':'.$_ENV['MDB_PASS'].'@'.$_ENV['ATLAS_CLUSTER_SRV'].'/sample_restaurants'
14 );
15
16 $collection = $client->sample_restaurants->restaurants;
17 $deleteResult = $collection->deleteMany(['cuisine' => 'Hamburgers']);
18
19 printf("Deleted %d document(s)\n", $deleteResult->getDeletedCount());
Você deverá ver algo semelhante à seguinte saída:
432 documentos excluídos
Se você executar isso várias vezes, sua saída obviamente será diferente. Isso ocorre porque você pode ter removido ou excluído documentos de execuções anteriores. Se, por algum motivo, você quiser restaurar seus dados de amostra, visite: https://docs.atlas.mongodb.com/sample-data/available-sample-datasets/ para obter instruções sobre como fazer isso.

Resumo

Os conceitos básicos de qualquer idioma geralmente são esclarecidos por meio do processo de criação, leitura, atualização e exclusão de dados. Neste artigo, analisamos os fundamentos do CRUD com PHP e MongoDB. No próximo artigo da série, colocaremos esses princípios em prática com uma aplicação do mundo real.
A criação ou inserção de documentos é realizada por meio de:
A leitura ou localização de documentos é realizada usando:
A atualização de documentos é realizada por meio do uso de:
A exclusão ou remoção de documentos é realizada usando:
Certifique-se de visitar, estrelar, bifurcar e clonar o repositório complementar deste artigo.
Dúvidas? Comentários? Queremos muito interagir com você. Participe da conversa nos fóruns da MongoDB Community.

Referências


Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Início rápido
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Notícias e anúncios

Laravel MongoDB 4.2 Lançado, com suporte do Laravel 11


Aug 28, 2024 | 1 min read
exemplo de código

Go-FIFA


Jul 07, 2022 | 2 min read
Notícias e Anúncios

Laravel MongoDB 5.0: Lançamento principal com novos recursos interessantes!


Sep 13, 2024 | 1 min read
Início rápido

Preparando-se para executar PHP com MongoDB


Aug 29, 2024 | 12 min read
Sumário