MongoDB Laravel: Embora o Laravel seja nativamente otimizado para bancos de dados relacionais (SQL), a integração com o MongoDB (um banco de dados NoSQL baseado em documentos) é uma opção poderosa para cenários que exigem esquemas flexíveis, grande escalabilidade horizontal e manipulação de dados não estruturados.
A principal ferramenta para essa integração é o pacote jenssegers/laravel-mongodb, que simula a experiência do Eloquent ORM para coleções MongoDB.
1. ⚙️ Instalação e Configuração
Para integrar o MongoDB ao Laravel, é necessário o driver PHP e o pacote do Composer.
A. Pré-Requisitos
- MongoDB Server: Certifique-se de que o servidor MongoDB esteja instalado e em execução (porta padrão 27017).
- Extensão PHP
mongodb: Instale a extensão C para PHP (melhor performance):
Bashpecl install mongodb# ou, dependendo da sua distribuição Linux: # sudo apt install php8.x-mongodb
B. Instalação do Pacote
O pacote jenssegers/laravel-mongodb estende o Eloquent para o contexto NoSQL.
Bash
composer require jenssegers/laravel-mongodb
C. Configuração da Conexão
Adicione uma nova conexão no arquivo config/database.php:
PHP
// config/database.php
'connections' => [
// ... outras conexões ...
'mongodb' => [
'driver' => 'mongodb',
'host' => env('MONGODB_HOST', '127.0.0.1'),
'port' => env('MONGODB_PORT', 27017),
'database' => env('MONGODB_DATABASE', 'app_db'),
'username' => env('MONGODB_USERNAME'),
'password' => env('MONGODB_PASSWORD'),
'options' => [],
],
],
Defina as variáveis no seu .env:
.ENV
DB_CONNECTION=mysql # Mantém o padrão SQL ou defina para mongodb
MONGODB_HOST=127.0.0.1
MONGODB_PORT=27017
MONGODB_DATABASE=nome_do_seu_banco_mongo
# MONGODB_USERNAME=user
# MONGODB_PASSWORD=password
2. 👩💻 Usando Eloquent com MongoDB
Para que seus models interajam com o MongoDB, eles devem estender a classe do pacote jenssegers.
A. Criando um Model
Crie seu model estendendo Jenssegers\Mongodb\Eloquent\Model e defina a conexão e o nome da coleção.
PHP
namespace App\Models;
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
class Produto extends Eloquent
{
// Define a conexão a ser utilizada
protected $connection = 'mongodb';
// Define o nome da coleção no MongoDB (equivalente à tabela no SQL)
protected $collection = 'produtos';
// O MongoDB usa _id como chave primária por padrão
protected $fillable = ['nome', 'preco', 'descricao', 'tags', 'detalhes_variados'];
}
B. Operações CRUD
O pacote permite o uso da sintaxe familiar do Eloquent:
PHP
// 1. Criando Documentos (Insertion)
$produto = Produto::create([
'nome' => 'Smartwatch Flex',
'preco' => 199.99,
'descricao' => 'Design moderno e bateria duradoura.',
'tags' => ['eletronicos', 'vestiveis', 'lancamento'],
// Dados não estruturados (flexibilidade NoSQL)
'avaliacoes' => [
['user' => 'John', 'rating' => 5],
['user' => 'Jane', 'rating' => 4]
]
]);
// 2. Buscando Documentos
$todos = Produto::all();
// O _id é uma string no formato ObjectId
$produto = Produto::find('6576b5c4f2c03e6b720e7e17');
// 3. Buscas com Query Builder Style
$caros = Produto::where('preco', '>', 150.00)
->orderBy('nome', 'asc')
->limit(10)
->get();
// 4. Atualizando Documentos
Produto::where('nome', 'Smartwatch Flex')->update([
'preco' => 179.99,
'$push' => ['tags' => 'promocao'] // Usando o operador $push nativo do MongoDB
]);
// 5. Deletando Documentos
Produto::where('nome', 'Produto Descontinuado')->delete();
Nota: O Eloquent do MongoDB lida automaticamente com o tipo de chave primária
ObjectId(String) e permite o uso de operadores nativos do MongoDB (como$push,$inc,$set) nas operações deupdate.
3. 🌐 Acessando a Coleção Diretamente (Query Builder)
Você também pode usar a Facade DB do Laravel para acessar o MongoDB diretamente no estilo Query Builder, sem passar pelo Eloquent.
PHP
use Illuminate\Support\Facades\DB;
// Seleciona a coleção 'produtos' na conexão 'mongodb'
$collection = DB::connection('mongodb')->collection('produtos');
// Inserindo múltiplos documentos
$collection->insertMany([
['nome' => 'Tablet X', 'preco' => 450],
['nome' => 'Fone BT', 'preco' => 80],
]);
// Buscando com operadores MongoDB (mais controle)
$fones = $collection->where('preco', ['$lt' => 100]) // Preço menor que 100
->get();
4. 💡 Considerações Finais
| Recurso | Banco de Dados Relacional (SQL) | MongoDB (NoSQL) |
| Esquema | Rígido (Definido por Migrations) | Flexível (Dados podem variar entre documentos) |
| Relacionamentos | Chaves Estrangeiras (Integridade Forte) | Embutidos (Embedded) ou Por Referência (Fraca) |
| Escalabilidade | Vertical (Mais difícil de escalar leitura/escrita) | Horizontal (Facilidade em Sharding/Cluster) |
Ao decidir pelo MongoDB, você opta por escalabilidade horizontal e flexibilidade no esquema. Mantenha em mente que ele não oferece o mesmo nível de integridade transacional (JOINs, chaves estrangeiras) que o SQL.
✅ Conclusão MongoDB Laravel
MongoDB Laravel: A integração do MongoDB via jenssegers/laravel-mongodb oferece a você o melhor dos dois mundos: o poder da arquitetura NoSQL para lidar com dados flexíveis e o conforto da sintaxe Eloquent do Laravel. Esta combinação é ideal para módulos da sua aplicação que gerenciam grandes volumes de dados não estruturados, como logs de eventos, perfis de usuários com dados variáveis ou catálogos de produtos complexos.
Mas antes de dominar o Laravel, se for o seu caso, toda jornada tem um início. Vamos entender quais são os conhecimentos básicos necessários para aproveitar ao máximo este poderoso framework. Para iniciar seus estudos no Laravel, você precisará dominar as seguintes tecnologias:
E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:















