Chuyển đến nội dung chính

Hướng dẫn Toàn diện về NoSQL với MongoDB

Tìm hiểu về cơ sở dữ liệu NoSQL – vì sao dùng NoSQL, cách chúng khác với cơ sở dữ liệu quan hệ, các loại, và tự thiết kế cơ sở dữ liệu NoSQL bằng MongoDB.
Đã cập nhật 5 thg 10, 2026  · 9 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

Khi lượng dữ liệu tạo ra trong kỷ nguyên số bùng nổ, cơ sở dữ liệu trở nên then chốt để lưu trữ, quản lý và phân tích dữ liệu lớn. Nhìn chung, có hai loại cơ sở dữ liệu: SQL và NoSQL.

Cơ sở dữ liệu SQL dùng định dạng có cấu trúc, dữ liệu được tổ chức thành các bảng với schema. Khác với cơ sở dữ liệu SQL, cơ sở dữ liệu NoSQL cung cấp schema linh hoạt để lưu trữ dữ liệu bán cấu trúc và phi cấu trúc. Chúng cung cấp hạ tầng cần thiết để quản lý và khai thác khối dữ liệu khổng lồ trong bối cảnh số ngày nay.

Hướng dẫn toàn diện này sẽ đề cập các kiến thức nền tảng về cơ sở dữ liệu NoSQL, các loại NoSQL khác nhau cùng ví dụ trong ngành. Nắm được những điều cơ bản, chúng ta sẽ đi sâu vào MongoDB, một cơ sở dữ liệu NoSQL phổ biến, và học cách thực hiện các thao tác CRUD (Tạo, Truy xuất, Cập nhật và Xóa).

NoSQL là gì?

NoSQL viết tắt của “Not Only SQL” (không chỉ SQL) và ra đời để khắc phục các hạn chế của cơ sở dữ liệu quan hệ. Cơ sở dữ liệu quan hệ tuân theo cấu trúc cứng nhắc, có dạng bảng và dùng SQL (Structured Query Language) để thao tác dữ liệu.

Cơ sở dữ liệu NoSQL mang đến cách tiếp cận linh hoạt hơn để lưu trữ dữ liệu bán cấu trúc và phi cấu trúc.

Ưu điểm then chốt của NoSQL là phù hợp để xử lý lượng dữ liệu lớn với cấu trúc đa dạng. NoSQL không bắt buộc schema, cho phép sự linh hoạt và khả năng mở rộng cao hơn.

Tuy vậy, các lợi ích này cũng đi kèm đánh đổi. NoSQL có tính nhất quán yếu và hỗ trợ hạn chế cho các truy vấn phức tạp. Dù vậy, chúng vẫn được sử dụng rộng rãi nhờ các lợi ích mang lại và bổ trợ cho cơ sở dữ liệu SQL.

Bạn có thể đọc thêm về những khác biệt chính giữa cơ sở dữ liệu SQL và NoSQL cùng một số gợi ý khi nên chọn loại nào trong một hướng dẫn riêng.

Các loại cơ sở dữ liệu NoSQL

Để đáp ứng nhu cầu của nhiều trường hợp sử dụng, cơ sở dữ liệu NoSQL dùng nhiều mô hình dữ liệu để tổ chức và truy cập dữ liệu. Dưới đây là 4 loại NoSQL phổ biến.

  1. Cặp khóa–giá trị là dạng đơn giản nhất của NoSQL. Dữ liệu được lưu dưới dạng cặp khóa và giá trị, có thể truy xuất bằng khóa. Một số ví dụ: Redis và Amazon DynamoDB.
  2. Hướng cột tổ chức dữ liệu theo cột thay vì theo hàng. Cấu trúc này hiệu quả khi truy xuất dữ liệu theo cột. Apache Cassandra, HBase và Google Bigtable là cơ sở dữ liệu hướng cột.
  3. Dựa trên đồ thị lưu dữ liệu trong cấu trúc đồ thị gồm nút (node), cạnh (edge) và thuộc tính. Neo4j và Amazon Neptune là các cơ sở dữ liệu đồ thị phổ biến.
  4. Hướng tài liệu lưu dữ liệu dưới dạng tài liệu giống JSON. Cấu trúc mỗi tài liệu có thể khác nhau và thậm chí chứa dữ liệu lồng nhau. Đây là loại NoSQL được dùng rộng rãi. Ví dụ: MongoDB và CouchDB.

Để tìm hiểu thêm về các loại cơ sở dữ liệu khác nhau, chúng tôi khuyến khích bạn tham khảo hướng dẫn NoSQL Databases: What Every Data Scientist Needs to Know.

Sau khi tìm hiểu NoSQL là gì và các loại NoSQL, đã đến lúc thực hành với NoSQL.

Hướng dẫn NoSQL: Thiết kế cơ sở dữ liệu NoSQL cho nền tảng blog

Đi sâu vào một ví dụ thực tế là điều quan trọng để nắm bắt và thử nghiệm các khái niệm đã đề cập. Hãy cùng đi qua một hướng dẫn NoSQL.

Giả sử bạn muốn xây dựng nền tảng blog của riêng mình. Bạn muốn tạo bài viết, cho phép bình luận và cập nhật chúng. Vì biết dữ liệu là phi cấu trúc, bạn hiểu rằng một cơ sở dữ liệu NoSQL như MongoDB sẽ phù hợp với trường hợp này.

MongoDB là cơ sở dữ liệu NoSQL mã nguồn mở. Thay vì dùng bảng, nó lưu dữ liệu trong các tài liệu giống JSON. Điều này cho phép biểu diễn dễ dàng các cấu trúc và mối quan hệ phức tạp. Việc quản lý các kiểu dữ liệu khác nhau như văn bản, số hoặc hình ảnh (thường có trong blog) cũng thuận tiện.

Hãy bắt đầu bằng cách thiết lập MongoDB trên máy của bạn.

1. Thiết lập MongoDB

Cài đặt MongoDB khá đơn giản. Bạn có thể tải và cài đặt từ trang web chính thức của MongoDB. Hướng dẫn khác nhau theo hệ điều hành, vì vậy hãy xem hướng dẫn cài đặt cho hệ điều hành của bạn trong tài liệu chính thức.

Sau khi cài đặt, hãy khởi động MongoDB. Mở terminal và gõ lệnh sau tùy hệ điều hành của bạn:

// Linux
sudo systemctl start mongod

//Mac OS
brew services start mongodb-community@7.0

Bạn sẽ nhận được thông báo “Successfully started” như dưới đây.

Kết quả: Khởi động MongoDB

Kết quả: Khởi động MongoDB. (Hình này và các hình bên dưới do Tác giả cung cấp)

Cài đặt MongoDB bao gồm một shell gọi là mongosh để tương tác với cơ sở dữ liệu MongoDB. Do đó, bạn có thể sử dụng mà không cần cài thêm gì.

Khởi động shell MongoDB bằng cách chạy lệnh sau trong terminal:

mongosh

Chạy lệnh mongosh sẽ cho ra kết quả dưới đây, cho biết đã kết nối tới cơ sở dữ liệu của bạn.

Khởi động shell MongoDB

Khởi động shell MongoDB.

Với MongoDB đã được cài đặt, chúng ta sẽ chuyển sang định nghĩa mô hình dữ liệu.

2. Xác định mô hình dữ liệu

Chúng ta sẽ tạo cơ sở dữ liệu tên “blog” và hai collection tên “posts” và “comments”. Collection “posts” dùng để lưu bài viết blog và collection “comments” dùng để lưu các bình luận cho những bài viết đó.

Mỗi tài liệu bài viết sẽ có các trường tiêu đề, nội dung, tác giả và ngày tạo, còn mỗi tài liệu bình luận sẽ bao gồm nội dung bình luận, tác giả và ID bài viết liên quan.

Để liệt kê tất cả cơ sở dữ liệu hiện có, chạy show dbs trên shell. Nếu đây là lần đầu bạn dùng MongoDB, bạn sẽ thấy kết quả dưới đây.

Liệt kê các cơ sở dữ liệu hiện có.

Mặc định, chúng ta sẽ dùng cơ sở dữ liệu test. Dù đang ở cơ sở dữ liệu test, cơ sở dữ liệu sẽ chưa được tạo cho đến khi chúng ta chèn một tài liệu vào một collection trong cơ sở dữ liệu.

Để tạo cơ sở dữ liệu mới, chạy use <database_name>.

Trong ví dụ của chúng ta, ta sẽ dùng “blog” làm tên cơ sở dữ liệu. Hãy chạy use blog để tạo cơ sở dữ liệu mới. Như đã nói ở trên, chạy lệnh show dbs sẽ chưa hiển thị cơ sở dữ liệu mới cho đến khi ta chèn một collection vào đó. Vì vậy, hãy chạy các lệnh dưới đây để tạo collection.

// create database
use blog

// create collection
db.createCollection("posts")
db.createCollection("comments")

Chạy use blog sẽ chuyển cơ sở dữ liệu từ “test” sang “blog”.

Kết quả: Tạo cơ sở dữ liệu và collection.

Sau khi tạo collection, chúng ta có thể kiểm tra bằng lệnh show dbs.

Danh sách cơ sở dữ liệu.

Chúng ta đã tạo thành công cơ sở dữ liệu và các collection.

3. Triển khai các thao tác CRUD

MongoDB hỗ trợ bốn thao tác CRUD (Tạo, Đọc, Cập nhật, Xóa) chính để tương tác với dữ liệu:

  1. Create: Để tạo tài liệu trong MongoDB, chèn tài liệu vào collection bằng phương thức insertOne() hoặc insertMany(). Tài liệu có thể chứa bất kỳ dữ liệu JSON hợp lệ nào, cho phép thiết kế schema linh hoạt.
  2. Read: Để đọc dữ liệu từ MongoDB, truy vấn bằng phương thức find(). Truy vấn lọc tài liệu dựa trên tiêu chí chỉ định và trả về kết quả.
  3. Update: Để cập nhật tài liệu, dùng updateOne() hoặc updateMany(). Phương thức này hỗ trợ thao tác dữ liệu linh hoạt.
  4. Delete: Để xóa tài liệu khỏi collection, dùng deleteOne() hoặc deleteMany(). Việc xóa dựa trên tiêu chí chỉ định, ví dụ khớp một giá trị trường cụ thể.

Sau khi đã xem các lệnh, hãy áp dụng vào trường hợp blog của chúng ta.

4. Tạo một bài viết blog

Có hai phương thức để chèn tài liệu vào cơ sở dữ liệu MongoDB.

  1. insertOne() : Chèn một tài liệu mỗi lần
  2. insertMany() : Có thể chèn nhiều tài liệu cùng lúc.

Hãy dùng cả hai phương thức để thêm bài viết vào cơ sở dữ liệu. Trong đoạn mã dưới, chúng ta tạo tài liệu trong collection “posts”. Mỗi tài liệu có tiêu đề, nội dung, tác giả và ngày tạo.

// use insertOne() method to insert one document to the "posts" collection
db.posts.insertOne({
   title: "Introduction to NoSQL with MongoDB",
   content: "MongoDB is a NoSQL database that stores data in JSON format",
   author: "Arunn Thevapalan",
   createdAt: new Date()
})

// array of blog post documents
var postsData = [
   {
       title: "Getting Started with MongoDB",
       content: "Learn the basics of MongoDB",
       author: "Arunn Thevapalan",
       createdAt: new Date()
   },
   {
       title: "Advanced MongoDB Techniques",
       content: "Explore advanced features of MongoDB",
       author: "Jim Murphy",
       createdAt: new Date()
   }
];

// use insertMany() to insert multiple documents
db.posts.insertMany(postsData);

Kết quả này cho thấy máy chủ MongoDB đã nhận và xử lý thành công yêu cầu insertOne.

Kết quả: Chèn một tài liệu vào collection.

Tương tự, kết quả dưới đây cho thấy đã xử lý thành công yêu cầu insertMany.

Kết quả: Chèn nhiều tài liệu vào collection.

Nắm được thao tác Create, tiếp theo là thao tác Read.

5. Truy vấn bài viết blog

Chúng ta có thể dùng phương thức find() để truy xuất dữ liệu từ các collection. Để truy xuất bài viết blog ở trên từ collection “posts”, chạy lệnh dưới đây.

db.posts.find()

Phương thức find sẽ truy xuất tất cả tài liệu trong collection “posts”. Kết quả dưới đây hiển thị tất cả tài liệu đã chèn ở bước trước.

Kết quả: Truy xuất tài liệu từ collection.

6. Thêm bình luận cho một bài viết

Giả sử chúng ta muốn thêm vài bình luận cho một bài viết, có thể chèn một tài liệu vào collection “comments”. Bình luận gắn với bài viết, nên chúng ta sẽ giữ tham chiếu tới ID bài viết.

// use an object id from any of the above entries
var postId = ObjectId("664bfc27f74ef93812b2179e")

// insert one comment
db.comments.insertOne({
   postId: postId,
   content: "Informative article!",
   author: "Anne Smith",
   createdAt: new Date()
})

Kết quả này cho thấy máy chủ MongoDB đã nhận và xử lý yêu cầu.

Kết quả: Tạo tài liệu tham chiếu tới tài liệu khác.

7. Truy vấn bình luận của một bài viết

Để truy xuất các bình luận gắn với một bài viết cụ thể, có thể dùng phương thức find() với bộ lọc truy vấn:

// retrieve the above comment

db.comments.find({postId: postId})

Kết quả dưới đây hiển thị bình luận chúng ta đã chèn ở bước trước.

Kết quả: Tìm tài liệu bằng truy vấn find.

Khi người dùng đã tạo bài viết, họ sẽ muốn có thể cập nhật sau này. Tiếp theo, hãy xem cách cập nhật tài liệu hiện có.

8. Cập nhật một bài viết blog

Tương tự như chèn, cập nhật cũng có thể thực hiện riêng lẻ hoặc hàng loạt.

  1. updateOne() : Cập nhật một tài liệu mỗi lần
  2. updateMany() : Cập nhật nhiều tài liệu cùng lúc.

Hãy thử đổi tiêu đề bài viết “Introduction to NoSQL with MongoDB” thành “Absolute Beginner Guide to NoSQL with MongoDB”.

Vì chúng ta biết ID bài viết từ bước trước, hãy chạy đoạn mã dưới để đổi tiêu đề. Nhớ thay postId bằng ID tài liệu của bạn.

var postId = ObjectId("664bfc27f74ef93812b2179e");

db.posts.updateOne(
   { _id: postId },
   { $set: { title: "Absolute Beginner guide to NoSQL with MongoDB"} }
);

// verify update
db.posts.find({_id: postId})

Kết quả cho thấy yêu cầu đã được xử lý thành công. Tìm thấy 1 tài liệu khớp và đã sửa đổi 1 tài liệu.

Kết quả: Cập nhật một tài liệu.

9. Xóa một bài viết blog

Để xóa một bài viết, có thể dùng deleteOne(). Tương tự các thao tác trước, ta cũng có thể dùng deleteMany() để xóa nhiều tài liệu cùng lúc nếu cần.

var postId = ObjectId("664bfc27f74ef93812b2179e");

// delete post
db.posts.deleteOne({ _id: postId });

// verify deletion -> no output
db.posts.find({_id: postId})

Kết quả xác nhận đã xóa thành công.

Kết quả: Xóa một tài liệu khỏi collection

Kết quả: Xóa một tài liệu khỏi collection

Tất nhiên, chúng ta đã đơn giản hóa thiết kế một nền tảng blog, vốn thường phức tạp với nhiều thao tác khác như tô đậm, thích, vỗ tay, gợi ý, v.v. Nhưng tất cả các thao tác đó đều dựa trên một trong các thao tác CRUD và giờ đây chúng ta đã nắm vững các khái niệm nền tảng. Đến lượt bạn khám phá và thử nghiệm thêm nhiều tính năng dựa trên các thao tác này.

Kết luận

Hướng dẫn này đã giới thiệu bạn về cơ sở dữ liệu NoSQL. Chúng ta bắt đầu với các khái niệm cơ bản, định nghĩa NoSQL, cách chúng khác với cơ sở dữ liệu quan hệ và các loại của chúng.

Chúng ta tiếp tục mở rộng sang MongoDB, một cơ sở dữ liệu hướng tài liệu được dùng rộng rãi. Cuối cùng, chúng ta đã thực hành với một ví dụ đơn giản để thiết kế cơ sở dữ liệu cho nền tảng blog.

Việc lúng túng khi thiết kế cơ sở dữ liệu cho một trường hợp mới là bình thường, và chúng tôi khuyến khích bạn tham khảo tài liệu chính thức để cập nhật hàm và ví dụ mới nhất.

Dưới đây là một số khóa học và hướng dẫn chuyên sâu hơn nếu bạn muốn mở rộng kiến thức về NoSQL.


Arunn Thevapalan's photo
Author
Arunn Thevapalan
LinkedIn
Twitter

Với vai trò nhà khoa học dữ liệu cao cấp, tôi thiết kế, phát triển và triển khai các giải pháp học máy quy mô lớn để giúp doanh nghiệp ra quyết định dựa trên dữ liệu hiệu quả hơn. Với vai trò tác giả về khoa học dữ liệu, tôi chia sẻ những bài học kinh nghiệm, lời khuyên nghề nghiệp và các hướng dẫn thực hành chuyên sâu.

Chủ đề
SQL

Tiếp tục học cùng DataCamp

Khóa học

Giới thiệu về NoSQL

4 giờ
10.9K
Xem chi tiếtRight Arrow
Bắt Đầu Khóa Học
Xem thêmRight Arrow
Liên quan

blog

Claude Opus 4.6: Tính năng, Điểm chuẩn, Bài kiểm tra thực hành và hơn thế nữa

Mô hình mới nhất của Anthropic dẫn đầu ở mã hóa tác tử và lập luận phức tạp. Thêm vào đó, nó có cửa sổ ngữ cảnh 1M.
Matt Crabtree's photo

Matt Crabtree

10 phút

Xem ThêmXem Thêm