MongoDB Laravel

Laravel
Tempo de leitura: 4 minutos

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

  1. MongoDB Server: Certifique-se de que o servidor MongoDB esteja instalado e em execução (porta padrão 27017).
  2. Extensão PHP mongodb: Instale a extensão C para PHP (melhor performance):
    Bash
    pecl 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 de update.

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

RecursoBanco de Dados Relacional (SQL)MongoDB (NoSQL)
EsquemaRígido (Definido por Migrations)Flexível (Dados podem variar entre documentos)
RelacionamentosChaves Estrangeiras (Integridade Forte)Embutidos (Embedded) ou Por Referência (Fraca)
EscalabilidadeVertical (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:

HTML
HTML
CSS
CSS
Javascript
JavaScript
SQL
SQL
Capa Curso PHP
PHP

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:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime

Author: Thiago Rossi
Com mais de 20 anos de jornada na tecnologia, minha trajetória evoluiu do ensino técnico à arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de soluções de Inteligência Artificial nativa e análise de dados públicos, utilizando o ecossistema PHP para transformar dados brutos em transparência e eficiência. Como autor e desenvolvedor, acredito na democratização do conhecimento. Essa visão resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura até os bastidores da indústria de Jogos e IA. No universo de Game Design, sou autor do livro "GDD – O Guia Definitivo" e documento ativamente meus processos através de DevLogs, unindo rigor técnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso é conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.