MERN (1) - Tổng quan MERN, MongoDB, Atlas

1         Tổng quan


1.1       Tổng quan về MERN


MERN viết đầy đủ là MERN stack, là một bộ công nghệ mã nguồn mở liên quan đến JavaScript. Gồm các công nghệ: MongoDB, Express, React/React Native và Nodejs.

Mọi người sử dụng MERN stack để xây dựng một ứng dụng web dựa trên JavaScript (React Universal App, Universal JavaScript App), gồm cả client-side (front-end) và server-side (back-end).

Xem hình minh họa[1],



– MongoDB: là hệ quản trị cơ sở dữ liệu mã nguồn mở, là cơ sở dữ liệu kiểu NoSQL (None-Relational SQL hoặc Not-Only SQL), là cơ sở dữ liệu hướng tài liệu (document). Dữ liệu được lưu trữ dưới dạng JSON (ví dụ BSON).

– Express: là một JavaScript framework, chạy ở server-side (backend), được xây dựng trên nền tảng Nodejs. Express cung cấp các tính năng cần thiết để tạo ra một ứng dụng web hoặc di động.

– React/React Native: React là một thư viện front-end (hay UI) viết bằng JavaScript, do Facebook phát triển. React Native là framework kế thừa từ React, dùng để viết ứng dụng di động đa nền tảng.

– Nodejs: là một nền tảng (platform) phát triển độc lập, được xây dựng trên JavaScript Runtime của Chrome (V8). Dựa trên Nodejs chúng ta có thể xây dựng được các ứng dụng mạng nhanh chóng, và dễ dàng mở rộng. Nodejs là nền tảng giúp chạy JavaScript tại phía server. Nodejs được viết bằng C++.


1.2       Tổng quan về MongoDB


Như đã trình bày ở phần trên, MongoDB:

– Là hệ quản trị cơ sở dữ liệu mã nguồn mở

– Là cơ sở dữ liệu kiểu NoSQL (None-Relational SQL hoặc Not-Only SQL)

– Là cơ sở dữ liệu hướng tài liệu (document).

– Dữ liệu được lưu trữ dưới dạng JSON (ví dụ BSON).


1.2.1       JSON là gì ?


JSON là viết tắt của JavaScript Object Notation, dịch nôm na là "sử dụng cú pháp đối tượng của JavaScript dưới dạng chuỗi để biểu diễn dữ liệu".

Để chạy các đoạn mã JavaScript minh họa dưới đây: tạo một tập tin html (ví dụ  test.html), trong tập tin html tạo cặp thẻ <script>//đặt mã JavaScript ở đây</script>, mở tập tin test.html để xem kết quả.

Cú pháp một đối tượng (object) thông thường trong JavaScript có kiểu như sau:


var object = {};

Trong JavaScript, nội dung của object gồm các cặp key:value hay có cách gọi khác là property:value. 

Ví dụ:

var sinhVien = {
    name: 'Tèo',
    age: 20,
    GPA: 8,
    chao: function() {
        console.log('Chao anh Teo!');
    }
};
console.log(sinhVien.name);
sinhVien.chao();

JSON là một object dạng chuỗi (thường gọi là chuỗi JSON) nên nó khác một object thông thường một số điểm sau:

– key hoặc property phải được bao trong dấu nháy kép (“”)

– value có thể ở dạng: chuỗi, số, boolean, null, mảng hoặc đối tượng

– không chứa hàm (function)

Ví dụ một chuỗi JSON, (để ý dấu ‘’ cho biết đó là một chuỗi, để phân biệt với BSON)

var sinhVienJSON = '{"name":"Tèo","age":20,"GPA":8}';
console.log(sinhVienJSON);
// đổi từ chuỗi JSON sang object
var sinhVienObj = JSON.parse(sinhVienJSON);
console.log(sinhVienObj);
// Hoặc
// khai báo một object
var sinhVienObject = {
    name: 'Tèo',
    age: 20,
    GPA: 8,
};
console.log(sinhVienObject);
// đổi object sang chuỗi JSON
var sinhVienJSON = JSON.stringify(sinhVienObject);
console.log(sinhVienJSON); // {"name":"Tèo","age":20,"GPA":8}

console.log({sinhVienJSON}); // {sinhVienJSON: "{"name":"Tèo","age":20,"GPA":8}"}


Lưu ý: trong chuỗi JSON không cho phép dùng dấu nháy đơn (‘’) để bao một key hoặc value.

Một danh sách lớp dưới dạng chuỗi JSON:

var studentsObj = [
    {
        name: 'Tèo',
        age: 20,
        GPA: 8,
    },
    {
        name: '',
        age: 20,
        GPA: 7,
    },
    {
        name: 'Mùi',
        age: 20,
        GPA: 6,
    }];
var studentsJSON = JSON.stringify(studentsObj);
console.log(studentsJSON);
// chuyển chuỗi JSON về lại dạng object
var newStudentsObj = JSON.parse(studentsJSON);
console.log(newStudentsObj);


1.2.2       BSON là gì ?


BSON là Binary JSON, là dữ liệu có định dạng kiểu JSON (dạng key : value) nhưng không phải là chuỗi JSON mà là dạng binary (cho phép biểu diễn nhiều kiểu dữ liệu).

Dữ liệu của MongoDB được lưu dưới dạng BSON (gọi là các BSON document).

Ví dụ một dữ liệu kiểu BSON,

{
    name: "Tèo", // string
    age: 20, // integer
    subjects: ["Văn", "Toán", "Sinh"], //array
    address: {
        street: "Đường làng",
        town: "Lò gạch",
        city: "Đồng quê"
    } //nested document
}


1.2.3       Các tên gọi trong MongoDB


Bảng sau so sánh tên gọi (thuật ngữ) giữa cơ sở dữ liệu quan hệ và cơ sở dữ liệu MongoDB:

Cơ sở dữ liệu quan hệ
MongoDB
Database
Database
Table
Collection
Row
Document (BSON document)
Index
Index
Join
$lookup
Foreign Key
Reference

Vậy, để lưu dữ liệu bằng MongoDB cần thực hiện các bước sau:

– Tạo một cơ sở dữ liệu (database), ví dụ: QuanLySinhVien

– Trong cơ sở dữ liệu, tạo các collection (bảng dữ liệu) để lưu thông tin, ví dụ SinhVien

– Trong collection, tạo các document (tạo các hàng dữ liệu cho bảng), ví dụ các BSON document

Ví dụ collection SinhVien:

{ name: "Tèo", age: 20 } //BSON document
{ name: "", age: 21 } //BSON document
{ name: "Mùi", age: 22 } //BSON document


1.2.4       MongoDB Atlas


MongoDB Atlas là hệ quản trị cơ sở dữ liệu MongoDB trực tuyến (cloud database), dùng để lưu trữ cơ sở dữ liệu và cung cấp các tính năng giúp sử dụng và quản trị cơ sở dữ liệu.

Vào trang của MongoDB: https://www.mongodb.com/cloud/atlas

Bấm nút Start free để tạo một tài khoản miễn phí. (legiacong@gmail.com/p@ssword1)

Việc đầu tiên là tạo một cluster (hiểu là cài đặt/hay tạo một database server): bấm Create a cluster, để các lựa chọn là mặc định, bấm Create Cluster.

Tạo các tài khoản người dùng được phép truy cập và sử dụng database server:

– Ở khung bên trái, mục SECURITY, chọn Database Access

– Ở khung bên phải, chọn Add New Database User, tạo một tài khoản (user1/p@ssword1), bấm Add User để tạo.

Cho phép các IP nào được truy cập tới cơ sở dữ liệu:

– Ở khung bên trái, mục SECURITY, chọn Network Access

– Ở khung bên phải, chọn Add IP Address, chọn chế độ cho phép truy cập từ mọi địa chỉ IP, bấm vào mục ALLOW ACCESS FROM ANYWHERE, bấm Confirm.

Lấy chuỗi kết nối tới database server:

– Ở khung bên trái, bấm vào mục Clusters

– Ở khung bên phải, chọn Cluster0, bấm vào nút CONNECT, chọn tiếp Connect your application, chọn Copy. Lưu chuỗi kết nối này về máy cục bộ để sau này sử dụng. Bấm Close để hoàn thành. Ví dụ: mongodb+srv://user1:<password>@cluster0-bgmrz.mongodb.net/test?retryWrites=true&w=majority


-----
Cập nhật: [24/10/2020]
-----
Xem thêm: MERN (2) -  Nodejs, JavaScript cho MERN
Xem thêm: Danh sách bài học