Hướng dẫn kết nối Laravel + MongoDB

1. Khái niệm MongoDB

MongoDB là một database hướng tài liệu (document), một dạng NoSQL database. Vì thế, MongoDB sẽ tránh cấu trúc table-based của relational database để thích ứng với các tài liệu như JSON có một schema rất linh hoạt gọi là BSON. Sử dụng lưu trữ dữ liệu dưới dạng Document JSON nên mỗi một collection sẽ các các kích cỡ và các document khác nhau. Các dữ liệu được lưu trữ trong document kiểu JSON nên truy vấn sẽ rất nhanh.

2. Khi nào sử dụng MongoDB

Quản lý và truyền tải content – Quản lý đa dạng nhiều product của content chỉ trong một kho lưu trữ data cho phép thay đổi và phản hồi nhanh chóng mà không chịu thêm phức tạp thêm từ hệ thống content.

Cấu trúc Mobile và Social – MongoDB cung cấp một platform có sẵn, phản xạ nhanh, và dễ mở rộng cho phép rất nhiều khả năng đột phá, phân tích real-time, và hỗ trợ toàn cầu.

Quản lý data khách hàng – Tận dụng khả năng query nhanh chóng cho phân tích real-time trên cơ sở dữ liệu người dùng cực lớn vớ các mô hình data phức tạp bằng các schema linh hoạt và tự động sharding cho mở rộng chiều ngang.

3. Ưu điểm và nhược điểm

Ưu điểm

Dữ liệu lưu trữ phi cấu trúc, không có tính ràng buộc, toàn vẹn nên tính sẵn sàng cao, hiệu suất lớn và dễ dàng mở rộng lưu trữ.

Dữ liệu được caching (ghi đệm) lên RAM, hạn chế truy cập vào ổ cứng nên tốc độ đọc và ghi cao.

Nhược điểm

Không ứng dụng được cho các mô hình giao dịch nào có yêu cầu độ chính xác cao do không có ràng buộc.

Không có cơ chế transaction (giao dịch) để phục vụ các ứng dụng ngân hàng.

Dữ liệu lấy RAM làm trọng tâm hoạt động vì vậy khi hoạt động yêu cầu một bộ nhớ RAM lớn.

Mọi thay đổi về dữ liệu mặc định đều chưa được ghi xuống ổ cứng ngay lập tức vì vậy khả năng bị mất dữ liệu từ nguyên nhân mất điện đột xuất là rất cao.

4. Kết nối Laravel + MongoDB

Tạo dự án laravel

composer create-project laravel/laravel Demo

Thêm package mongoDB vào dự án

composer require mongodb/laravel-mongodb:4.0.0

Thêm cấu hình mongoDB

Thêm vào file config/database.php

'connections' => [
        'mongodb' => [
            'driver' => 'mongodb',
            'dsn' => env('MONGODB_URI'),
            'database' => 'YOUR_DATABASE_NAME',
        ],

Để lấy các thông tin cấu hình mongoDB truy cập connection mongoDB

Tạo Database

Chọn connect->Drivers

Khi đó bạn sẽ lấy được chuỗi kết nối có dạng như thế này

mongodb+srv://<username>:<password>@test.hlpfzgm.mongodb.net/?retryWrites=true&w=majority

Cập nhật vào file .env

MONGODB_URI=mongodb+srv://<username>:<password>@test.hlpfzgm.mongodb.net/?retryWrites=true&w=majority

Lưu ý: <username> và <password> là username và password đã được nhập ở bước tạo database

Cập nhật vào file config/database.php

'default' => env('DB_CONNECTION', 'mongodb'),

Kiểm tra kết nối

Route::get('/ping', function (Request  $request) {    
    $connection = DB::connection('mongodb');
    $msg = 'Thành công!';
    try {  
        $connection->command(['ping' => 1]);  
    } catch (\Exception  $e) {  
        $msg = 'Thất bại: ' . $e->getMessage();
    }
    return ['msg' => $msg];
});

Tạo migration và model

public function up(): void
    {
        Schema::create('customers', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email');
            $table->string('age');
            $table->timestamps();
        });
    }
Chạy lệnh:
php artisan migration
php artisan make:model Customer
//use Illuminate\Database\Eloquent\Model;
 use MongoDB\Laravel\Eloquent\Model;

class  Customer  extends  Model
{
    use  HasFactory;

    protected  $connection = 'mongodb';

    protected  $collection = 'customers';

    protected  $fillable = ['name','email','age'];
}

CRUD

//Thêm mới
CustomerSQL::create([
        'name'=> 'customer_1',
        'email'=> '[email protected]',
        'age' => '18',
]);
//Lấy thông tin customers
Customer::where('name', 'customer_1')->get();

Hết rồi, hy vọng bài viết có thể giúp ích được cho bạn
Cảm ơn và hẹn gặp lại =)) !!!

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like
Read More

Có gì mới ở PHP 8.3?

Table of Contents Hide 1. Typed Class Constants2. Dynamic class constant fetch3. json_validate() function4. #[\Override] attribute5. Deep Cloning of readonly Properties6. Randomizer::getBytesFromString() method7. Randomizer::getFloat() and…
Read More

20 Laravel Eloquent Tips and Tricks (P1)

Eloquent ORM được sủ dụng rất nhiều trong 1 project Laravel, tuy nhiên để sử dụng được tối đa những gì Laravel cung cấp thì không phải ai cũng biết. Trong bài viết này mình sẽ chỉ cho các bạn một vài thủ thuật, hi vọng sẽ giúp ích cho các bạn trong một vài trường hợp cụ thể.
Read More

SOLID Principles

Table of Contents Hide Single-responsibility PrincipleOpen/Closed Principle (OCP)Liskov Substitution Principle (LSP)Interface Segregation Principle (ISP)Dependency Inversion Principle (DIP)Advantages of…