Cara Menghubungkan Laravel dengan MongoDB dan Membuat CRUD API

MongoDB adalah database NoSQL yang menyimpan data dalam format dokumen, tidak seperti MySQL yang pakai tabel dan relasi. Kalian pernah install MongoDB di Windows sebelumnya? Kalau belum, sebaiknya baca dulu sebelum lanjut di sini.
kenapa pakai MongoDB? Beberapa keunggulan:
- Schema fleksibel , tidak perlu mendefinisikan struktur tabel terlebih dahulu
- Scalable , mudah distribute ke banyak server
- Document-based , cocok untuk data yang berubah-ubah strukturnya
di panduan ini kalian akan belajar cara menghubungkan Laravel dengan MongoDB dan membuat aplikasi CRUD sederhana.
Zaman Dulu vs Zaman Sekarang
Buat kalian yang pernah coba integrasi Laravel + MongoDB beberapa tahun lalu, pasti ingat betapa ribetnya. Saya sendiri pernah frustrasi saat mencoba hal yang sama di tahun 2021.
Zaman Dulu (2019-2023) , Era Bingung
Dulu integrate MongoDB di Laravel itu seperti masuk dunia yang berbeda. Kita harus bergantung ke library community jenssegers/mongodb yang dibuat satu orang sukarelawan bernama Jens Segers. Bukan berarti library-nya jelek, tapi ya itu , dibuat oleh satu orang.
Saya masih ingat langkah-langkahnya:
- Install library dari Composer, tapi harus pilih versi yang cocok dengan Laravel
composer require jenssegers/mongodb:3.9
- Buka
config/app.php, tambah manual service provider
'providers' => [
...
Jenssegers\Mongodb\MongodbServiceProvider::class,
],
- Konfigurasi database.php dengan format yang kadang error
'mongodb' => [
'driver' => 'mongodb',
'host' => env('DB_HOST', '127.0.0.1'),
'database' => env('DB_DATABASE', 'homestead'),
...
],
- Model pakai namespace yang berbeda dari biasanya
use Jenssegers\Mongodb\Eloquent\Model;
class Article extends Model { ... }
- Query Builder-nya juga beda , pakai
DB::collection()bukanDB::table()
Dan masalahnya? Banyak:
- Version conflict , Mau upgrade Laravel ke versi baru? Bersiap-siap library-nya tidak jalan. Saya sendiri pernah stuck di Laravel 8 karena library-nya belum support Laravel 9.
- Dokumentasiamburadul , Setiap versi Laravel, cara pakainya kadang berubah. Tutorial di internet zaman now sudah tidak applicable.
- Komunitas kecil , StackOverflow jawabannya sedikit, forum Indonesia jumlahnya bahkan lebih sedikit.
- Maintenance tidak pasti , Apakah library-nya masih di-update? Apakah akan tetap compatible tahun depan?
Saya sampai pernah quit pakai MongoDB karena frustrasi ini. “Ribet amat,” pikir saya waktu itu.
Zaman Sekarang (2024+) , Era Tenang
Tapi kemudian MongoDB menyadari ekosistem di sekitar produk mereka. Mereka melihat begitu banyak developer PHP/Laravel yang struggle. Jadi mereka putuskan: buat official package.
Dan boom , sekarang semuanya berubah.
composer require mongodb/laravel-mongodb
Satu baris. selesai. Tidak perlu register service provider, tidak perlu konfigurasi ribet. Laravel auto-discovery langsung handle.
Namespace-nya juga berubah jadi official:
use MongoDB\Laravel\Eloquent\Model;
class Article extends Model { ... }
Dan query builder-nya? Tinggal tambah .connection('mongodb'):
use Illuminate\Support\Facades\DB;
$articles = DB::connection('mongodb')->collection('articles')->get();
Mantap kan?
Keunggulan package official:
- Tim besar , bukan satu orang, tapi tim MongoDB yang dedicated
- Update rutin , mengikuti versi Laravel dan MongoDB server
- Dokumentasi lengkap , https://www.mongodb.com/docs/laravel/mongodb/
- Future-proof , selama Laravel ada update, package ini juga di-update
Jadi kalau kalian masih ketemu tutorial lama yang pakai jenssegers/mongodb , itu sudah deprecated. Tidak disarankan lagi. Pindah ke package official sekarang juga.
Syarat Awal
Sebelum mulai, pastikan kalian sudah install:
- PHP 8.1+ , cek dengan
php -v - Composer , untuk install library
- MongoDB , running di localhost:27017 atau pakai MongoDB Atlas (cloud)
- Ekstensi PHP MongoDB , tanpa ini, PHP tidak bisa komunikasi dengan MongoDB
Cek apakah ekstensi MongoDB sudah terinstall
php -m | findstr mongodb
kalau tidak muncul apa-apa, install dulu:
Windows (XAMPP/Laragon):
- Download dari https://pecl.php.net/package/mongodb
- Pilih versi sesuai PHP kalian (cek
php -v) - Download file DLL yang Thread Safe atau Non-Thread Safe sesuai PHP
- Ekstrak, copy
php_mongodb.dllke folderextPHP - Edit
php.ini, tambahkanextension=php_mongodb.dll - Restart Apache
Linux/Mac:
pecl install mongodb
lalu tambahkan extension=mongodb.so di php.ini.
Docker (recommended):
Kalau pakai Docker, cukup tambah service di docker-compose.yml:
mongodb:
image: mongo:7
ports:
- "27017:27017"
environment:
MONGO_INITDB_DATABASE: laravel
Install Project Laravel
Untuk panduan ini, pakai Laravel 11. Kalau belum punya, install dulu:
composer create-project laravel/laravel belajar-mongodb-laravel
cd belajar-mongodb-laravel
Install Package MongoDB Official
Laravel tidak langsung support MongoDB. Kalian butuh package official dari MongoDB:
composer require mongodb/laravel-mongodb
Ini adalah package resmi dari MongoDB. Mendukung Laravel 10 dan 11.
Konfigurasi Database MongoDB
Di file .env
Buka .env, ubah koneksi database:
DB_CONNECTION=mongodb
DB_HOST=127.0.0.1
DB_PORT=27017
DB_DATABASE=laravel
DB_USERNAME=
DB_PASSWORD=
Kalau pakai MongoDB Atlas (cloud):
DB_CONNECTION=mongodb
DB_HOST=cluster0.xxxxxx.mongodb.net
DB_PORT=27017
DB_DATABASE=laravel
DB_USERNAME=USERNAME_ANDA
DB_PASSWORD=PASSWORD_ANDA
Konfigurasi di config/database.php (opsional)
Di Laravel 11, koneksi MongoDB sudah otomatis ter-register setelah install library. Tapi kalau mau konfigurasi manual, tambah di config/database.php:
'mongodb' => [
'driver' => 'mongodb',
'dsn' => env('DB_DSN'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', 27017),
'database' => env('DB_DATABASE', 'laravel'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
'options' => [
'appname' => 'laravel-mongodb',
],
],
Membuat Model dan Controller CRUD
1. Buat Model
Jalankan command:
php artisan make:model Article
Buka app/Models/Article.php, ubah isinya:
<?php
namespace App\Models;
use MongoDB\Laravel\Eloquent\Model;
class Article extends Model
{
protected $connection = 'mongodb';
protected $collection = 'articles';
protected $fillable = [
'title',
'content',
'author',
'tags',
];
protected $casts = [
'tags' => 'array',
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}
Penjelasan:
extends ModeldariJenssegers\Mongodb, bukan dari Illuminate\Eloquent$connection = 'mongodb', pakai koneksi MongoDB$collection = 'articles', nama collection di MongoDB$casts['tags'] = 'array', field tags otomatis di-cast jadi array PHP
2. Buat Controller
php artisan make:controller ArticleController
Buka app/Http/Controllers/ArticleController.php:
<?php
namespace App\Http\Controllers;
use App\Models\Article;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
// READ - Ambil semua data
public function index()
{
$articles = Article::all();
return response()->json([
'success' => true,
'data' => $articles,
]);
}
// CREATE - Simpan artikel baru
public function store(Request $request)
{
$article = Article::create([
'title' => $request->title,
'content' => $request->content,
'author' => $request->author,
'tags' => $request->tags ?? [],
]);
return response()->json([
'success' => true,
'message' => 'Artikel berhasil dibuat',
'data' => $article,
], 201);
}
// READ - Ambil satu artikel
public function show(string $id)
{
$article = Article::find($id);
if (!$article) {
return response()->json([
'success' => false,
'message' => 'Artikel tidak ditemukan',
], 404);
}
return response()->json([
'success' => true,
'data' => $article,
]);
}
// UPDATE - Update artikel
public function update(Request $request, string $id)
{
$article = Article::find($id);
if (!$article) {
return response()->json([
'success' => false,
'message' => 'Artikel tidak ditemukan',
], 404);
}
$article->update([
'title' => $request->title ?? $article->title,
'content' => $request->content ?? $article->content,
'author' => $request->author ?? $article->author,
'tags' => $request->tags ?? $article->tags,
]);
return response()->json([
'success' => true,
'message' => 'Artikel berhasil diupdate',
'data' => $article,
]);
}
// DELETE - Hapus artikel
public function destroy(string $id)
{
$article = Article::find($id);
if (!$article) {
return response()->json([
'success' => false,
'message' => 'Artikel tidak ditemukan',
], 404);
}
$article->delete();
return response()->json([
'success' => true,
'message' => 'Artikel berhasil dihapus',
]);
}
}
3. Tambah Route
Buka routes/api.php, tambahkan:
use App\Http\Controllers\ArticleController;
Route::get('/articles', [ArticleController::class, 'index']);
Route::post('/articles', [ArticleController::class, 'store']);
Route::get('/articles/{id}', [ArticleController::class, 'show']);
Route::put('/articles/{id}', [ArticleController::class, 'update']);
Route::delete('/articles/{id}', [ArticleController::class, 'destroy']);
Testing CRUD
Jalankan server:
php artisan serve
Test dengan cURL atau Postman
Create (POST):
curl -X POST http://localhost:8000/api/articles \
-H "Content-Type: application/json" \
-d '{"title":"Judul Artikel","content":"Isi artikel...","author":"Budi","tags":["php","laravel"]}'
Read All (GET):
curl http://localhost:8000/api/articles
Read One (GET):
curl http://localhost:8000/api/articles/ID_DARI_HASIL_CREATE
Update (PUT):
curl -X PUT http://localhost:8000/api/articles/ID \
-H "Content-Type: application/json" \
-d '{"title":"Judul Diubah"}'
Delete (DELETE):
curl -X DELETE http://localhost:8000/api/articles/ID
Query Builder MongoDB
Selain Eloquent, kalian juga bisa pakai Query Builder:
use Illuminate\Support\Facades\DB;
// Ambil semua dokumen
$articles = DB::connection('mongodb')->collection('articles')->get();
// Filter dengan where
$articles = DB::connection('mongodb')->collection('articles')
->where('author', 'Budi')
->where('tags', 'laravel')
->get();
// Order dan limit
$latest = DB::connection('mongodb')->collection('articles')
->orderBy('created_at', 'desc')
->limit(5)
->get();
// Count dokumen
$total = DB::connection('mongodb')->collection('articles')->count();
Kesimpulan
- MongoDB adalah database NoSQL yang cocok untuk data fleksibel
- Install package
mongodb/laravel-mongodb(official) untuk integrasi dengan Laravel - Model untuk MongoDB extends
MongoDB\Laravel\Eloquent\Model - CRUD dengan MongoDB sama mudahnya dengan MySQL
- Pakai
$castsuntuk konversi tipe data otomatis
Pertanyaan yang Sering Diajukan
Apa syarat install MongoDB di PHP?
PHP harus punya ekstensi mongodb. Di Windows, tambahkan baris extension=php_mongodb.dll di php.ini. Di Linux/Unix, install via pecl install mongodb.
Perbedaan Eloquent Model biasa dengan Model MongoDB?
Model biasa extends Illuminate\Database\Eloquent\Model, sedangkan untuk MongoDB extends MongoDB\Laravel\Eloquent\Model. Package MongoDB official menyediakan semua method yang dibutuhkan.
Apakah bisa pakai MongoDB dan MySQL sekaligus di Laravel?
Bisa. Konfigurasi di config/database.php definisikan kedua koneksi, lalu saat membuat Model tentukan $connection. Untuk MongoDB pakai "mongodb", untuk MySQL pakai "mysql".
Bagaimana cara backup database MongoDB?
Dari terminal, jalankan mongodump --db=nama_database --out=./backup. Untuk restore, pakai mongorestore --db=nama_database ./backup/nama_database. Tool ini sudah include saat install MongoDB.

