MongoDB là hệ cơ sở dữ liệu NoSQL mã nguồn mở phổ biến, ra đời như một giải pháp giúp khắc phục những khuyết điểm của cơ sở dữ liệu quan hệ truyền thống. Từ đó, giúp lưu trữ, quản lý dữ liệu lớn một cách linh hoạt. Trong bài viết dưới đây, Tenten sẽ giúp bạn hiểu rõ hơn MongoDB là gì, các tính năng nổi bật, ưu điểm và hạn chế của hệ cơ sở dữ liệu này.
Contents
Trước khi tìm hiểu chi tiết các tính năng nổi bật của MongoDB là gì, bạn cần có kiến thức tổng quan về MongoDB và NoSQL là gì.
MongoDB là hệ quản trị cơ sở dữ liệu mã nguồn mở thuộc dạng NoSQL. Thay vì lưu trữ dữ liệu theo dạng bảng cố định như các cơ sở dữ liệu quan hệ (RDBMS), MongoDB lưu trữ dưới dạng các tài liệu (Document) linh hoạt giống JSON hoặc BSON. Nhờ đó, giúp việc mở rộng và phát triển ứng dụng nhanh chóng hơn.
MongoDB ra đời năm 2007, được phát triển bởi công ty 10gen (nay là MongoDB Inc.). Ban đầu dự án hướng tới nền tảng đám mây, nhưng nhóm sáng lập sớm nhận ra sự hạn chế của cơ sở dữ liệu SQL truyền thống trước dữ liệu lớn, phức tạp.
Năm 2009, MongoDB được chuyển thành mã nguồn mở với tư cách là cơ sở dữ liệu NoSQL lưu trữ dưới dạng tài liệu, linh hoạt, dễ mở rộng và nhanh chóng trở thành tiêu chuẩn công nghệ phổ biến toàn cầu.

NoSQL (Not Only SQL) là hệ quản trị cơ sở dữ liệu phi quan hệ. Thay vì lưu trữ dữ liệu theo bảng (hàng và cột) như cơ sở dữ liệu SQL truyền thống, NoSQL lưu trữ dưới dạng tài liệu (JSON), cặp khóa-giá trị hoặc đồ thị.
NoSQL ra đời như là 1 mảnh vá cho những khuyết điểm của mô hình dữ liệu quan hệ RDBMS, nổi bật với khả năng mở rộng quy mô dễ dàng và xử lý dữ liệu lớn.
Để làm việc hiệu quả với MongoDB, bạn cần làm quen với một số thuật ngữ cốt lõi dưới đây:
|
Thuật ngữ |
Mô tả chi tiết |
|
Query |
Câu lệnh dùng để truy vấn, tìm kiếm, cập nhật hoặc xóa dữ liệu trong MongoDB dựa trên các điều kiện và toán tử truy vấn. |
|
Replica Set |
Nhóm nhiều MongoDB instance lưu trữ cùng một dữ liệu để đảm bảo tính sẵn sàng cao, tự động chuyển đổi khi máy chủ chính gặp sự cố. |
|
Shard |
Một phần dữ liệu được phân chia trong kiến trúc Sharding, giúp MongoDB mở rộng theo chiều ngang và xử lý khối lượng dữ liệu lớn trên nhiều máy chủ. |
|
Database |
Là vùng chứa các collection trong MongoDB, tương tự một cơ sở dữ liệu trong hệ quản trị CSDL quan hệ. Một MongoDB Server có thể quản lý nhiều database khác nhau. |
|
Document |
Đơn vị dữ liệu cơ bản nhất trong MongoDB, tương đương một bản ghi (row). Mỗi document gồm các cặp field-value và được lưu trữ dưới định dạng BSON. |
|
Collection |
Tập hợp các document có liên quan, tương tự một bảng (table). Các document trong cùng một collection không bắt buộc phải có cùng cấu trúc dữ liệu. |
|
Field |
Một cặp key-value bên trong document, tương tự một cột (column). Giá trị của field có thể thuộc nhiều kiểu dữ liệu khác nhau như chuỗi, số, boolean, mảng hoặc document lồng nhau. |
|
_id |
Trường đặc biệt đóng vai trò khóa chính (Primary Key) để định danh duy nhất mỗi document. Nếu không được chỉ định, MongoDB sẽ tự động tạo một ObjectId cho trường này. |
|
BSON (Binary JSON) |
Định dạng dữ liệu nhị phân mà MongoDB sử dụng để lưu trữ document. BSON mở rộng từ JSON, hỗ trợ nhiều kiểu dữ liệu hơn và được tối ưu về hiệu suất lưu trữ, xử lý. |
|
Lược đồ linh hoạt (Flexible Schema / Dynamic Schema) |
Đặc điểm cho phép các document trong cùng một collection có cấu trúc khác nhau, giúp dữ liệu dễ dàng mở rộng và thay đổi theo nhu cầu của ứng dụng. |
Sau khi đã có kiến thức cơ bản về MongoDB là gì, hãy cùng tìm hiểu chi tiết cách MongoDB lưu trữ dữ liệu và hoạt động.
MongoDB lưu trữ dữ liệu theo mô hình Database → Collection → Document. Trên một MongoDB Server, bạn có thể tạo nhiều database và mỗi database có thể chứa nhiều collection. Bên trong mỗi collection là nhiều document dùng để lưu trữ dữ liệu của ứng dụng.
MongoDB lưu trữ document dưới định dạng BSON (Binary JSON). Khi dữ liệu JSON được gửi đến máy chủ, MongoDB sẽ chuyển đổi sang BSON để tối ưu hiệu suất lưu trữ, truy vấn và hỗ trợ nhiều kiểu dữ liệu hơn JSON thông thường. Mỗi BSON document có kích thước tối đa 16 MB.
Một điểm nổi bật của MongoDB là hỗ trợ dữ liệu lồng nhau (Embedded Document). Thay vì tách dữ liệu thành nhiều bảng và liên kết bằng JOIN như SQL, MongoDB cho phép lưu các đối tượng liên quan ngay trong cùng một document.

MongoDB hoạt động theo kiến trúc gồm hai lớp chính là Layer Ứng dụng (Application Layer) và Layer Dữ liệu (Data Layer). Mỗi lớp đảm nhiệm một vai trò riêng trong quá trình xử lý và lưu trữ dữ liệu.
Layer Ứng dụng (Application Layer)
Đây là lớp người dùng tương tác trực tiếp với MongoDB, bao gồm:
Layer Dữ liệu (Data Layer)
Các truy vấn từ lớp ứng dụng sẽ được gửi đến MongoDB Server. Máy chủ MongoDB tiếp nhận và xử lý truy vấn, sau đó chuyển tiếp đến Storage Engine. MongoDB Server không trực tiếp đọc hoặc ghi dữ liệu trên ổ đĩa hay bộ nhớ mà toàn bộ thao tác lưu trữ, truy xuất dữ liệu sẽ do Storage Engine đảm nhiệm.
Sau khi Storage Engine hoàn thành việc đọc hoặc ghi dữ liệu, kết quả sẽ được trả về MongoDB Server và phản hồi lại cho ứng dụng. Cơ chế phân tách giữa xử lý truy vấn và lưu trữ dữ liệu giúp MongoDB vận hành hiệu quả, đồng thời dễ dàng mở rộng và tối ưu hiệu năng.

MongoDB cung cấp nhiều tính năng giúp các lập trình viên và doanh nghiệp xây dựng, mở rộng và quản lý các ứng dụng hiện đại với khối lượng dữ liệu lớn một cách linh hoạt, hiệu quả.
Để tăng tốc độ truy vấn, MongoDB cho phép lập trình viên tạo chỉ mục (index) cho bất kỳ trường nào trong tài liệu. Hệ thống hỗ trợ đa dạng các loại index như:
Đây là công cụ phân tích dữ liệu mạnh mẽ giúp bạn xử lý và biến đổi luồng dữ liệu. Sử dụng mô hình đường ống (pipeline), framework này cho phép bạn thực hiện các thao tác từ lọc dữ liệu (matching), nhóm dữ liệu (grouping), đến tính toán phân tích, mang lại hiệu năng cao hơn rất nhiều so với việc kéo toàn bộ dữ liệu thô về ứng dụng.
Replica Set là một nhóm các bản sao của cơ sở dữ liệu lưu trữ cùng một tập hợp dữ liệu, giúp đảm bảo tính dự phòng và an toàn. Nếu node chính (primary node) gặp sự cố, hệ thống sẽ tự động bầu chọn một node phụ (secondary node) lên làm node chính, đảm bảo ứng dụng của bạn luôn sẵn sàng hoạt động 24/7.
Khi khối lượng dữ liệu vượt quá khả năng xử lý của một máy chủ đơn, MongoDB sử dụng cơ chế Sharding (phân mảnh) để phân phối dữ liệu tự động trên nhiều máy chủ vật lý. Tính năng này giúp bạn mở rộng quy mô lưu lượng một cách liền mạch mà ứng dụng không bị gián đoạn.
GridFS là một hệ thống con trong MongoDB được thiết kế để lưu trữ và truy xuất các tệp tin có kích thước lớn hơn giới hạn BSON thông thường. GridFS chia nhỏ tệp tin thành các phần (chunks) và quản lý chúng một cách có hệ thống.
MongoDB hỗ trợ các giao dịch ACID (Atomicity, Consistency, Isolation, Durability) đa tài liệu. Nhờ đó, bạn có thể thực hiện nhiều thao tác đọc/ghi trên nhiều tài liệu khác nhau một cách nhất quán. Nếu một bước trong giao dịch thất bại, toàn bộ quá trình sẽ được hoàn tác.
Mặc dù nổi tiếng là schema-less, MongoDB vẫn cho phép bạn áp dụng các quy tắc ràng buộc (validation rules) sử dụng tiêu chuẩn JSON Schema. Điều này rất quan trọng khi bạn muốn ép buộc các tài liệu phải tuân thủ các quy tắc nhất định (ví dụ: trường email phải có định dạng đúng, trường tuổi phải là số) trước khi được lưu vào cơ sở dữ liệu.
Change Streams cho phép thông báo thời gian thực khi có bất kỳ thay đổi nào như thêm, sửa hay xóa xảy ra trên dữ liệu. Tính năng này đóng vai trò then chốt khi bạn xây dựng các ứng dụng cần đồng bộ hóa dữ liệu ngay lập tức giữa nhiều máy khách hoặc hệ thống.
Time Series Collections là tính năng được tối ưu hóa đặc biệt để lưu trữ và phân tích các chuỗi dữ liệu liên tục theo thời gian (ví dụ: dữ liệu từ cảm biến IoT, biến động giá cổ phiếu, hoặc nhật ký hệ thống). Time Series Collections giúp tăng hiệu suất ghi và giảm đáng kể không gian lưu trữ
MongoDB cung cấp các lớp bảo mật toàn diện cho doanh nghiệp bao gồm:
Thay vì lưu trữ dữ liệu trong các bảng với hàng và cột như cơ sở dữ liệu SQL truyền thống, MongoDB lưu trữ dữ liệu dưới dạng các tài liệu (document). Các tài liệu này sử dụng định dạng BSON (Binary JSON), cho phép lưu trữ các cấu trúc dữ liệu phân cấp, mảng, và các đối tượng phức tạp một cách tự nhiên, ánh xạ trực tiếp tới mã nguồn ứng dụng.
Mỗi tài liệu trong cùng một Collection (tương tự như bảng trong SQL) không bắt buộc phải có cùng một tập hợp các trường (field) hoặc cấu trúc dữ liệu. Nhờ đó, bạn có thể linh hoạt thêm hoặc sửa đổi các trường trong tài liệu một cách linh động mà không cần phải định nghĩa lại toàn bộ cấu trúc cơ sở dữ liệu.
MongoDB nổi bật với khả năng mở rộng quy mô linh hoạt, hiệu năng cao nhờ cấu trúc lưu trữ dạng tài liệu không cần schema cố định. Tuy nhiên, MongoDB lại thiếu khả năng hỗ trợ các thao tác nối bảng phức tạp và tốn nhiều bộ nhớ.
MongoDB sở hữu những ưu điểm nổi bật sau:

Một số nhược điểm của MongoDB có thể kể đến như:
MongoDB cung cấp nhiều câu lệnh giúp bạn tạo cơ sở dữ liệu, quản lý collection và thao tác với dữ liệu một cách nhanh chóng. Dưới đây là những câu lệnh MongoDB cơ bản mà người mới bắt đầu cần nắm vững.
Để tạo mới hoặc chuyển sang một database, sử dụng lệnh:
use DatabaseName
Ví dụ:
use projectdemo
Lưu ý: Nếu database chưa tồn tại, MongoDB sẽ chỉ tạo database sau khi bạn thêm dữ liệu vào đó.
Để kiểm tra database hiện tại, sử dụng lệnh:
db
Lệnh này sẽ hiển thị tên của database đang được sử dụng.
Để liệt kê tất cả database trên MongoDB Server, sử dụng lệnh:
show dbs
Lưu ý: Chỉ những database đã chứa ít nhất một collection có dữ liệu mới được hiển thị.
Để tạo một collection mới, sử dụng lệnh:
db.createCollection("tenCollection")
Ví dụ:
db.createCollection("users")
Để thêm một document:
db.users.insertOne({
name: "Mai",
age: 25
})
Để thêm nhiều document cùng lúc:
db.users.insertMany([
{ name: "Nam", age: 28 },
{ name: "Linh", age: 22 }
])
Để hiển thị toàn bộ dữ liệu trong collection:
db.users.find()
Nếu muốn hiển thị kết quả dễ đọc hơn:
db.users.find().pretty()
Để truy vấn dữ liệu theo điều kiện:
db.users.find({ age: { $gt: 25 } })
Ví dụ trên sẽ trả về tất cả document có age lớn hơn 25.
Một số toán tử điều kiện thường dùng:
|
Toán tử |
Ý nghĩa |
Ví dụ |
|
|
Bằng |
|
|
|
Nhỏ hơn |
|
|
|
Nhỏ hơn hoặc bằng |
|
|
|
Lớn hơn |
|
|
|
Lớn hơn hoặc bằng |
|
|
|
Khác |
|
|
|
Thuộc danh sách |
|
|
|
Không thuộc danh sách |
|
Xóa một document:
db.users.deleteOne({ name: "Mai" })
Xóa nhiều document:
db.users.deleteMany({ age: { $lt: 18 } })
Cập nhật một document:
db.users.updateOne(
{ name: "Mai" },
{ $set: { age: 30 } }
)
Cập nhật nhiều document:
db.users.updateMany(
{ age: { $lt: 18 } },
{ $set: { status: "Minor" } }
)
Index giúp MongoDB tìm kiếm dữ liệu nhanh hơn, đặc biệt với các collection có số lượng document lớn.
Tạo index cho trường name:
db.users.createIndex({ name: 1 })
Trong đó:
Để xem MongoDB thực hiện truy vấn như thế nào và có sử dụng index hay không, dùng:
db.users.find({ age: 30 }).explain("executionStats")
Lệnh này cung cấp thông tin về kế hoạch thực thi (Query Execution Plan), số document được quét và thời gian xử lý truy vấn.
Kết nối bằng Node.js (MongoDB Node.js Driver):
const { MongoClient } = require("MongoDB");
const client = new MongoClient("MongoDB://localhost:27017");
await client.connect();
Kết nối bằng Python (PyMongo):
from pymongo import MongoClient
client = MongoClient("MongoDB://localhost:27017/")
db = client["projectdemo"]
Để sao lưu database, sử dụng công cụ mongodump:
mongodump --db projectdemo --out backup/
Để khôi phục dữ liệu từ bản sao lưu, sử dụng mongorestore:
mongorestore --db projectdemo backup/projectdemo
Nhờ khả năng mở rộng quy mô dễ dàng, MongoDB giúp các doanh nghiệp xử lý lượng lớn dữ liệu và được ứng dụng trong nhiều lĩnh vực như:

MongoDB (NOSQL) lưu dữ liệu theo tài liệu JSON linh hoạt và dễ thay đổi. Trong khi đó, RDBMS (SQL) lưu dữ liệu theo bảng, có cấu trúc chặt chẽ. Bảng dưới đây sẽ giúp bạn hiểu rõ sự khác biệt giữa MongoDB và RDBMS:
|
Tiêu chí |
MongoDB |
RDBMS (bao gồm MySQL) |
|
Cấu trúc lưu trữ |
Dựa trên tài liệu (Document định dạng JSON/BSON). |
Dựa trên bảng (Table) gồm Hàng và Cột. |
|
Tính linh hoạt |
Rất linh hoạt. Các bản ghi không cần cùng cấu trúc (Schema động). |
Kém linh hoạt. Bắt buộc định nghĩa cấu trúc (Schema) trước khi thêm dữ liệu. |
|
Mối quan hệ |
Ít dùng mối quan hệ. Dữ liệu thường được nhúng trực tiếp vào nhau. |
Liên kết các bảng với nhau chặt chẽ qua Khóa ngoại (Foreign Key). |
|
Ngôn ngữ |
Dùng các hàm/phương thức truy vấn (VD: db.users.find()). |
Dùng ngôn ngữ truy vấn cấu trúc SQL (VD: SELECT * FROM users). |
|
Tính toàn vẹn |
Đảm bảo tính toàn vẹn ở mức từng tài liệu riêng lẻ. |
Đảm bảo tính toàn vẹn dữ liệu cực cao trên toàn hệ thống (ACID). |
|
Mở rộng |
Dễ dàng mở rộng ngang (chia nhỏ dữ liệu ra nhiều máy chủ – Sharding). |
Mở rộng dọc (nâng cấp phần cứng máy chủ) dễ hơn. |
|
Dữ liệu phù hợp |
Dữ liệu lớn, chưa định hình rõ, ứng dụng thời gian thực, mạng xã hội. |
Dữ liệu có cấu trúc phức tạp, hệ thống tài chính, ngân hàng, kế toán. |
MongoDB và MySQL đều là những hệ quản trị cơ sở dữ liệu phổ biến, nhưng được thiết kế theo hai mô hình khác nhau. Bảng dưới đây sẽ giúp bạn dễ dàng so sánh những điểm khác biệt quan trọng giữa hai hệ quản trị này.
|
Tiêu chí |
MongoDB |
MySQL |
|
Mô hình dữ liệu |
Lưu trữ dữ liệu dưới dạng document JSON/BSON, tổ chức thành collection. |
Lưu trữ dữ liệu theo bảng (table) gồm hàng và cột. |
|
Khả năng mở rộng |
Mở rộng theo chiều ngang bằng Replica Set và Sharding. |
Mở rộng theo chiều dọc, hỗ trợ Read Replica để tăng hiệu năng đọc. |
|
Ngôn ngữ truy vấn |
MongoDB Query Language (MQL). |
SQL (Structured Query Language). |
|
Hiệu năng |
Tối ưu cho Insert và Update khối lượng dữ liệu lớn. |
Tối ưu cho các truy vấn SELECT trên dữ liệu quan hệ. |
|
Tính linh hoạt |
Schema-less, hỗ trợ dữ liệu có cấu trúc, bán cấu trúc và phi cấu trúc. |
Schema cố định, phù hợp với dữ liệu có cấu trúc. |
|
Bảo mật |
Hỗ trợ xác thực bằng Kerberos, X.509, LDAP. |
Sử dụng cơ chế xác thực tích hợp của MySQL. |
Lựa chọn MongoDB hay MySQL phụ thuộc vào mô hình dữ liệu và yêu cầu của ứng dụng. Dưới đây là trường hợp phù hợp để sử dụng từng hệ quản trị cơ sở dữ liệu:
MongoDB hỗ trợ hầu hết các ngôn ngữ lập trình phổ biến hiện nay như JavaScript(Node.js), Python, Java, C# (.NET), GoC và C++, PHP.
MongoDB cung cấp 3 phiên bản chính:
MongoDB phù hợp với những nền tảng như Linux, macOS, Windows, Docker với cả phiên bản Community và phiên bản Enterprise.
MongoDB là cơ sở dữ liệu NoSQL dùng để lưu trữ, quản lý và truy xuất lượng lớn dữ liệu linh hoạt. MongoDB được dùng phổ biến trong các ứng dụng web, ứng dụng di động và phân tích dữ liệu lớn.
Có. MongoDB là hệ quản trị cơ sở dữ liệu NoSQL mã nguồn mở phổ biến nhất hiện nay.
BSON (Binary JSON) là định dạng dữ liệu nhị phân. Nó mã hóa các tài liệu giống như JSON. BSON giúp máy tính đọc, lưu trữ và tìm kiếm dữ liệu nhanh hơn.
MongoDB lưu trữ dữ liệu dưới dạng các tài liệu (Document) theo cấu trúc BSON (Binary JSON). BSON là phiên bản nhị phân của JSON, giúp máy tính đọc và tìm kiếm dữ liệu nhanh hơn.
Collection trong MongoDB là một nhóm các tài liệu (document), tương đương với một bảng (table) trong các cơ sở dữ liệu quan hệ như MySQL. Các collection đóng vai trò lưu trữ dữ liệu và nằm bên trong một cơ sở dữ liệu (database).
MongoDB Atlas là dịch vụ cơ sở dữ liệu trên đám mây (Database-as-a-Service) do chính nhà phát triển MongoDB cung cấp. Dịch vụ này giúp bạn dễ dàng lưu trữ và quản lý dữ liệu mà không cần phải tự cài đặt hay cấu hình các máy chủ vật lý phức tạp.
Schema trong MongoDB là schema-less, SQL định nghĩa một lược đồ thông qua định nghĩa bảng. Một lược đồ Mongoose ‘là một cấu trúc dữ liệu tài liệu (hoặc hình dạng của tài liệu) được thi hành qua lớp ứng dụng.
Nhìn chung, MongoDB là một giải pháp hoàn hảo cho các dự án lớn, ứng dụng web/di động hiện đại cần xử lý lượng dữ liệu khổng lồ và thay đổi liên tục. Hy vọng những thông tin trong bài viết trên đã giúp bạn hiểu rõ MongoDB là gì, các tính năng nổi bật, ưu điểm và hạn chế khi sử dụng mô hình này.