Uma biblioteca Laravel para integração simplificada com MongoDB, oferecendo uma interface fluente e intuitiva para operações com banco de dados MongoDB.
- PHP: ^8.2
- Laravel: ^11.0 || ^12.0
- Extensão MongoDB para PHP: Obrigatória para funcionamento
- Composer: Para gerenciamento de dependências
Antes de usar esta biblioteca, você deve ter a extensão MongoDB instalada no PHP.
php -m | grep mongodbSe não retornar nada, a extensão não está instalada.
# Instalar a extensão
sudo apt-get update
sudo apt-get install php-mongodb
# Ou via PECL
sudo pecl install mongodb
# Adicionar ao php.ini se necessário
echo "extension=mongodb" | sudo tee -a /etc/php/8.2/cli/php.ini
echo "extension=mongodb" | sudo tee -a /etc/php/8.2/fpm/php.ini
# Reiniciar serviços
sudo systemctl restart apache2 # ou nginx
sudo systemctl restart php8.2-fpm# Via Homebrew
brew install php@8.2
brew install mongodb/brew/mongodb-community
# Instalar extensão via PECL
pecl install mongodb
# Adicionar ao php.ini
echo "extension=mongodb" >> /usr/local/etc/php/8.2/php.ini
# Reiniciar serviços se necessário
brew services restart php@8.2- Baixe a extensão MongoDB apropriada do PECL
- Extraia o arquivo
php_mongodb.dllpara a pastaextdo PHP - Adicione
extension=mongodbao arquivophp.ini - Reinicie o servidor web
composer require techapi/mongo-laravelAdicione a configuração do MongoDB no arquivo config/database.php:
'connections' => [
// ... outras conexões
'mongodb' => [
'driver' => 'mongodb',
'host' => env('MONGO_HOST', 'localhost'),
'port' => env('MONGO_PORT', 27017),
'username' => env('MONGO_USER', ''),
'password' => env('MONGO_PASS', ''),
'options' => [
'database' => env('MONGO_DB', 'laravel'),
'authSource' => env('MONGO_AUTH_SOURCE', 'admin'), // Opcional
],
],
],Adicione as seguintes variáveis ao seu arquivo .env:
MONGO_HOST=localhost
MONGO_PORT=27017
MONGO_USER=seu_usuario
MONGO_PASS=sua_senha
MONGO_DB=nome_do_banco
MONGO_AUTH_SOURCE=adminO package possui auto-discovery habilitado, mas se precisar registrar manualmente, adicione em config/app.php:
'providers' => [
// ...
Mongo\Providers\MongoServiceProvider::class,
],
'aliases' => [
// ...
'Mongo' => Mongo\Facades\Mongo::class,
],Use o comando artisan para criar um novo model:
php artisan make:mongo-model UserOu especificando o nome da collection:
php artisan make:mongo-model User --collection=usuariosIsso criará um model em app/Models/User.php:
<?php
namespace App\Models;
use Mongo\Facades\Mongo;
class User extends Mongo
{
protected static string $collection = 'users';
}use App\Models\User;
// Criar um novo usuário
$result = User::create([
'name' => 'João Silva',
'email' => 'joao@email.com',
'age' => 30
]);// Criar ou atualizar baseado em um filtro
$result = User::createOrUpdate(
['name' => 'João Silva', 'age' => 31], // dados
['email' => 'joao@email.com'] // filtro
);// Buscar um usuário
$user = User::findOneData(['email' => 'joao@email.com'])->toArray();// Buscar usuários com paginação
$users = User::findAllWithPaginate(
['age' => ['$gte' => 18]], // filtro
10, // limite por página
1 // página atual
);
// Retorna:
// [
// 'data' => [...],
// 'paginate' => [
// 'current_page' => 1,
// 'total' => 100,
// 'per_page' => 10,
// 'last_page' => 10
// ]
// ]| Método | Descrição | Parâmetros |
|---|---|---|
create() |
Cria um novo documento | array $data |
createOrUpdate() |
Cria ou atualiza documento | array $data, array $filter |
findOneData() |
Busca um documento | array $filter |
findAllWithPaginate() |
Busca com paginação | array $filter = [], int $limit = 10, int $page = 1 |
toArray() |
Converte resultado para array | - |
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function index(Request $request)
{
$page = $request->get('page', 1);
$limit = $request->get('limit', 10);
$users = User::findAllWithPaginate([], $limit, $page);
return response()->json($users);
}
public function store(Request $request)
{
$userData = $request->validate([
'name' => 'required|string',
'email' => 'required|email',
'age' => 'integer|min:0'
]);
$result = User::create($userData);
return response()->json(['created' => $result > 0]);
}
public function show(string $email)
{
$user = User::findOneData(['email' => $email])->toArray();
if (empty($user)) {
return response()->json(['error' => 'Usuário não encontrado'], 404);
}
return response()->json($user);
}
public function update(Request $request, string $email)
{
$userData = $request->validate([
'name' => 'string',
'age' => 'integer|min:0'
]);
$result = User::createOrUpdate($userData, ['email' => $email]);
return response()->json(['updated' => $result > 0]);
}
}// Buscar usuários com idade entre 18 e 65 anos
$adults = User::findAllWithPaginate([
'age' => [
'$gte' => 18,
'$lte' => 65
]
]);
// Buscar usuários por múltiplos emails
$users = User::findAllWithPaginate([
'email' => [
'$in' => ['joao@email.com', 'maria@email.com']
]
]);
// Buscar usuários cujo nome contém "Silva"
$users = User::findAllWithPaginate([
'name' => new \MongoDB\BSON\Regex('Silva', 'i')
]);- Causa: Extensão MongoDB não instalada
- Solução: Siga as instruções de instalação da extensão acima
- Causa: MongoDB não está rodando ou configuração incorreta
- Solução:
- Verifique se o MongoDB está rodando:
mongosh - Verifique as configurações no
.env - Teste a conexão:
php artisan tinker→DB::connection('mongodb')->getMongoDB()
- Verifique se o MongoDB está rodando:
- Causa: Credenciais incorretas
- Solução:
- Verifique
MONGO_USEReMONGO_PASSno.env - Verifique
MONGO_AUTH_SOURCE(geralmente 'admin')
- Verifique
- Faça um fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.
Para questões e suporte, abra uma issue no GitHub.