Skip to content

MongoDB

Giới thiệu (Introduction)

MongoDB là document database phổ biến nhất hiện nay. Laravel hỗ trợ MongoDB chính thức qua package mongodb/laravel-mongodb — cho phép bạn sử dụng Eloquent models, query builder, migrations, và nhiều tính năng Laravel khác với MongoDB.

Cài đặt (Installation)

MongoDB Driver

Cài đặt PHP MongoDB extension:

bash
pecl install mongodb

Thêm vào php.ini:

ini
extension=mongodb.so

Khởi chạy MongoDB Server

Sử dụng MongoDB Atlas (cloud) hoặc chạy local:

bash
# Docker
docker run -d -p 27017:27017 --name mongodb mongo:latest

Cài package

bash
composer require mongodb/laravel-mongodb

Cấu hình (Configuration)

Thêm connection trong config/database.php:

php
'connections' => [
    'mongodb' => [
        'driver' => 'mongodb',
        'dsn' => env('MONGODB_URI', 'mongodb://localhost:27017'),
        'database' => env('MONGODB_DATABASE', 'laravel'),
    ],
],

Hoặc qua .env:

env
DB_CONNECTION=mongodb
MONGODB_URI=mongodb://localhost:27017
MONGODB_DATABASE=laravel_app

Tính năng (Features)

Eloquent Models

Sử dụng MongoDB\Laravel\Eloquent\Model thay vì base Eloquent Model:

php
<?php

namespace App\Models;

use MongoDB\Laravel\Eloquent\Model;

class Flight extends Model
{
    protected $connection = 'mongodb';
    protected $collection = 'flights'; // Tên collection
}

Query Builder

Hoạt động giống query builder thông thường:

php
use Illuminate\Support\Facades\DB;

$users = DB::connection('mongodb')
    ->collection('users')
    ->where('status', 'active')
    ->get();

$user = DB::connection('mongodb')
    ->collection('users')
    ->where('name', 'John')
    ->first();

Relationships

Hỗ trợ Eloquent relationships:

php
// One-to-Many
class User extends Model
{
    public function posts()
    {
        return $this->hasMany(Post::class);
    }
}

// Embedded documents
class User extends Model
{
    public function addresses()
    {
        return $this->embedsMany(Address::class);
    }
}

Schema / Migrations

php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Schema;
use MongoDB\Laravel\Schema\Blueprint;

return new class extends Migration
{
    protected $connection = 'mongodb';

    public function up(): void
    {
        Schema::connection('mongodb')
            ->create('flights', function (Blueprint $collection) {
                $collection->index('name');
                $collection->unique('flight_number');
            });
    }
};

Transactions

MongoDB 4.0+ hỗ trợ multi-document transactions:

php
DB::connection('mongodb')->transaction(function () {
    User::create(['name' => 'Taylor']);
    Flight::create(['name' => 'Flight 101']);
});

Tính năng nâng cao

  • Aggregation Pipeline — Xử lý dữ liệu phức tạp
  • GridFS — Lưu trữ files lớn
  • Full-Text Search — Tìm kiếm toàn văn
  • Geospatial Queries — Truy vấn địa lý
  • Change Streams — Theo dõi thay đổi realtime

GHI CHÚ

Xem thêm tại mongodb/laravel-mongodb documentation để biết chi tiết đầy đủ các tính năng.