MongoDB là cơ sở dữ liệu hướng tài liệu, miễn phí và mã nguồn mở, được xếp vào nhóm NoSQL vì không dùng cấu trúc bảng truyền thống như cơ sở dữ liệu quan hệ. Thay vào đó, nó lưu trữ tài liệu dạng JSON với lược đồ động.
Khác với cơ sở dữ liệu quan hệ, MongoDB không cần lược đồ định nghĩa sẵn trước khi thêm dữ liệu và cho phép thay đổi lược đồ bất kỳ lúc nào, bao nhiêu lần tùy ý mà không phải tạo mới cơ sở dữ liệu.
Trong hướng dẫn này, chúng ta sẽ cài đặt MongoDB trên CentOS 7.

Điều kiện tiên quyết
Trước khi thực hiện hướng dẫn này, bạn cần có:
Một máy chủ CentOS 7 với người dùng không phải root được cấp quyền sudo.
Bước 1: Thêm repository MongoDB
Các repository mặc định của CentOS không chứa gói mongodb-org, nhưng MongoDB có duy trì một repository riêng. Chúng ta sẽ thêm repository này vào máy chủ.
Dùng trình soạn thảo vi để tạo tệp .repo cho yum, tiện ích quản lý gói của CentOS:
sudo vi /etc/yum.repos.d/mongodb-org.repo
Sau đó, truy cập phần Install on Red Hat trong tài liệu của MongoDB và thêm thông tin repository của bản phát hành ổn định mới nhất vào tệp:
/etc/yum.repos.d/mongodb-org.repo
[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc
Lưu thay đổi vào tệp bằng cách nhấn phím ESC, sau đó gõ :wq, rồi nhấn ENTER.
Trước khi tiếp tục, cần xác minh rằng repository MongoDB tồn tại trong tiện ích yum. Lệnh repolist hiển thị danh sách các repository đã bật:
yum repolist
Output
. . .
repo id repo name
base/7/x86_64 CentOS-7 - Base
extras/7/x86_64 CentOS-7 - Extras
mongodb-org-6.0/7/x86_64 MongoDB Repository
updates/7/x86_64 CentOS-7 - Updates
. . .
Khi đã có repository MongoDB, bạn có thể tiếp tục cài đặt ở bước 2.
Bước 2: Cài đặt MongoDB
Bạn có thể cài đặt gói mongodb-org từ repository của bên thứ ba bằng tiện ích yum.
sudo yum install mongodb-org
Sẽ có 2 thông báo Is this ok [y/N]:: thông báo đầu tiên cho phép cài đặt các gói MongoDB, còn thông báo thứ hai dùng để nhập khóa GPG.
Nhà phát hành MongoDB ký phần mềm của họ, và yum dùng khóa này để xác minh tính toàn vẹn của gói đã tải. Ở mỗi thông báo, nhập Y rồi nhấn ENTER.
Tiếp theo, khởi động dịch vụ MongoDB với tiện ích systemctl:
sudo systemctl start mongod
Mặc dù chúng ta sẽ không sử dụng trong hướng dẫn này nhưng bạn cũng có thể thay đổi trạng thái dịch vụ MongoDB với các lệnh reload và stop.
Lệnh reload yêu cầu tiến trình mongod đọc tệp cấu hình /etc/mongod.conf và áp dụng mọi thay đổi mà không cần khởi động lại.
sudo systemctl reload mongod
Lệnh stop dừng tất cả tiến trình mongod đang chạy.
sudo systemctl stop mongod
Tiện ích systemctl không cung cấp kết quả sau khi chạy lệnh start, nhưng bạn có thể kiểm tra dịch vụ đã khởi động bằng cách xem phần cuối của tệp mongod.log với lệnh tail:
sudo tail /var/log/mongodb/mongod.log
Output
. . .
[initandlisten] waiting for connections on port 27017
Kết quả hiển thị waiting for a connection cho biết, MongoDB đã khởi động thành công và bạn có thể truy cập máy chủ cơ sở dữ liệu bằng MongoDB Shell:
mongo
Lưu ý, khi bạn mở MongoDB Shell, có thể bạn sẽ thấy một cảnh báo như sau:
*** WARNING:** soft rlimits too low. rlimits set to 4096 processes, 64000 files. Number of processes should be at least 32000 : 0.5 times number of files.*
MongoDB là ứng dụng đa luồng, có thể tạo thêm tiến trình để xử lý khối lượng công việc.
Cảnh báo này cho biết để MongoDB hoạt động hiệu quả, số tiến trình mà nó được phép khởi tạo nên bằng một nửa số tệp mà nó có thể mở cùng lúc.
Để xử lý cảnh báo, thay đổi giá trị soft rlimit cho số tiến trình của mongod bằng cách chỉnh sửa tệp 20-nproc.conf:
sudo vi /etc/security/limits.d/20-nproc.conf
Thêm dòng sau vào cuối tệp:
/etc/security/limits.d/20-nproc.conf
. . .
mongod soft nproc 32000
Lưu thay đổi bằng cách nhấn phím ESC, sau đó gõ :wq, rồi nhấn ENTER.
Để giới hạn mới có hiệu lực với MongoDB, khởi động lại bằng tiện ích systemctl:
sudo systemctl restart mongod
Sau đó, khi bạn kết nối lại với MongoDB Shell, cảnh báo sẽ không còn nữa.
Để tìm hiểu cách tương tác với MongoDB từ shell, bạn có thể xem kết quả của phương thức db.help() cung cấp danh sách các phương thức cho đối tượng db.
db.help()
Output
DB methods:
db.adminCommand(nameOrDocument) - switches to 'admin' db, and runs command [ just calls db.runCommand(...) ]
db.auth(username, password)
db.cloneDatabase(fromhost)
db.commandHelp(name) returns the help for the command
db.copyDatabase(fromdb, todb, fromhost)
db.createCollection(name, { size : ..., capped : ..., max : ... } )
db.createUser(userDocument)
db.currentOp() displays currently executing operations in the db
db.dropDatabase()
. . .
Giữ tiến trình mongod chạy nền, nhưng thoát khỏi shell bằng lệnh exit:
exit
Output
Bye
Bước 3: Xác minh khởi động
Vì ứng dụng dựa trên cơ sở dữ liệu không thể chạy nếu thiếu cơ sở dữ liệu nên chúng ta cần đảm bảo tiến trình MongoDB daemon mongod khởi động cùng hệ thống.
Sử dụng tiện ích systemctl để kiểm tra trạng thái khởi động:
systemctl is-enabled mongod; echo $?
Kết quả bằng 0 xác nhận daemon đã bật, đây là điều chúng ta mong muốn. Kết quả bằng 1 xác nhận daemon bị vô hiệu hóa và sẽ không khởi động.
Output
. . .
enabled
0
Trong trường hợp daemon bị vô hiệu hóa, sử dụng tiện ích systemctl để bật lại:
sudo systemctl enable mongod
Giờ bạn đã có một phiên bản MongoDB đang chạy, sẽ tự động khởi động sau khi hệ thống reboot.
Bước 4: Nhập tập dữ liệu mẫu (Tùy chọn)
Không giống các máy chủ cơ sở dữ liệu khác, MongoDB không có sẵn dữ liệu trong cơ sở dữ liệu test. Vì không muốn thử nghiệm phần mềm mới bằng dữ liệu production, chúng ta sẽ tải về một tập dữ liệu mẫu từ ví dụ của MongoDB.
Tệp JSON này chứa danh sách các nhà hàng, chúng ta sẽ dùng để thực hành thao tác với MongoDB và tránh ảnh hưởng đến dữ liệu nhạy cảm.
Bắt đầu bằng cách chuyển đến một thư mục có quyền ghi:
cd /tmp
Sử dụng lệnh curl và liên kết từ MongoDB để tải tệp JSON:
curl -LO <https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json>
Lệnh mongoimport sẽ chèn dữ liệu vào cơ sở dữ liệu test.
- Cờ
--dbđịnh nghĩa cơ sở dữ liệu nào sẽ dùng - Cờ
--collectionxác định nơi lưu trữ thông tin trong cơ sở dữ liệu - Cờ
--filechỉ định tệp mà lệnh sẽ thực hiện thao tác nhập:
mongoimport --db test --collection restaurants --file /tmp/primer-dataset.json
Kết quả xác nhận việc nhập dữ liệu từ tệp primer-dataset.json:
Output
connected to: localhost
imported 25359 documents
Với tập dữ liệu mẫu đã có, bạn có thể thực hiện truy vấn trên đó.
Mở lại MongoDB Shell:
mongo
Shell mặc định chọn cơ sở dữ liệu test, nơi bạn đã nhập dữ liệu.
Truy vấn tập hợp restaurants bằng phương thức find() để hiển thị danh sách tất cả nhà hàng trong tập dữ liệu. Vì tập hợp có hơn 25.000 mục, bạn nên dùng phương thức tùy chọn limit() để giới hạn kết quả và pretty() để định dạng dữ liệu dễ đọc hơn với xuống dòng và thụt lề.
db.restaurants.find().limit(1).pretty()
Output
{
"_id" : ObjectId("57e0443b46af7966d1c8fa68"),
"address" : {
"building" : "1007",
"coord" : [
-73.856077,
40.848447
],
"street" : "Morris Park Ave",
"zipcode" : "10462"
},
"borough" : "Bronx",
"cuisine" : "Bakery",
"grades" : [
{
"date" : ISODate("2014-03-03T00:00:00Z"),
"grade" : "A",
"score" : 2
},
{
"date" : ISODate("2013-09-11T00:00:00Z"),
"grade" : "A",
"score" : 6
},
{
"date" : ISODate("2013-01-24T00:00:00Z"),
"grade" : "A",
"score" : 10
},
{
"date" : ISODate("2011-11-23T00:00:00Z"),
"grade" : "A",
"score" : 9
},
{
"date" : ISODate("2011-03-10T00:00:00Z"),
"grade" : "B",
"score" : 14
}
],
"name" : "Morris Park Bake Shop",
"restaurant_id" : "30075445"
}
Bạn có thể tiếp tục sử dụng tập dữ liệu mẫu để làm quen với MongoDB hoặc xóa nó bằng phương thức db.restaurants.drop():
db.restaurants.drop()
Cuối cùng, thoát khỏi shell bằng lệnh exit:
exit
Output
Bye
Kết luận
Trong hướng dẫn này, bạn đã thêm một repository bên thứ ba vào yum, cài đặt máy chủ cơ sở dữ liệu MongoDB, nhập tập dữ liệu mẫu và thực hiện một truy vấn đơn giản.
Vẫn còn nhiều điều khác bạn có thể làm với MongoDB, như tạo cơ sở dữ liệu với các collection, thêm nhiều tài liệu vào cơ sở dữ liệu và xây dựng các ứng dụng mạnh mẽ.
Để tìm hiểu thêm về MongoDB, tham khảo loạt bài Cách quản lý cơ sở dữ liệu với MongoDB hoặc các hướng dẫn khác về MongoDB.