Bài tập

Hướng dẫn cài đặt và sử dụng MongoDB

Huy Erick

Xin chào các bạn! Trong series bài viết "Những gì mình biết về MongoDB", chúng ta đã tìm hiểu về một NoSQL DB rất phổ biến là MongoDB. Trong bài viết này, mình sẽ chia...

Xin chào các bạn! Trong series bài viết "Những gì mình biết về MongoDB", chúng ta đã tìm hiểu về một NoSQL DB rất phổ biến là MongoDB. Trong bài viết này, mình sẽ chia sẻ với các bạn cách cài đặt MongoDB dạng standalone và một số thao tác cơ bản với MongoDB như tạo database, tạo collection, thêm/sửa/xóa dữ liệu cơ bản.

Cài đặt MongoDB trên Ubuntu 20.04

Đầu tiên, chúng ta sẽ cài đặt MongoDB 6.0 Community Edition trên Ubuntu 20.04 LTS Focal. Quá trình cài đặt khá đơn giản, bạn chỉ cần làm theo các bước sau:

Bước 1: Thêm key cho repo phục vụ cài đặt MongoDB

wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -

Kết quả trả về "OK" là thành công. Nếu có lỗi, bạn có thể thực hiện thêm bước sau và sau đó thử lại bước trên:

sudo apt-get install -y gnupg wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -

Bước 2: Thêm key cho repo phục vụ cài đặt MongoDB

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

Bước 3: Cập nhật lại repo local

sudo apt update -y

Bước 4: Cài đặt gói MongoDB

sudo apt-get install -y mongodb-org

Nếu bạn cài đặt bằng gói trên OS, hãy đánh dấu gói cài đặt này không tự động cập nhật khi thực hiện update repo bằng cách sau:

echo "mongodb-org hold" | sudo dpkg --set-selections echo "mongodb-org-database hold" | sudo dpkg --set-selections echo "mongodb-org-server hold" | sudo dpkg --set-selections echo "mongodb-mongosh hold" | sudo dpkg --set-selections echo "mongodb-org-mongos hold" | sudo dpkg --set-selections echo "mongodb-org-tools hold" | sudo dpkg --set-selections

Khởi chạy MongoDB

Trước khi khởi chạy MongoDB, cần lưu ý về cấu hình ulimit. Bạn cần set giá trị ulimit cho max-open-files tối thiểu là 64000, nếu không service mongod sẽ báo lỗi. Giá trị ulimit được set theo từng user của OS, do đó cần set đúng với user dùng để chạy MongoDB.

Khi cài đặt bằng package manager như dùng apt trên Ubuntu như trên, giá trị ulimit đã được set tự động, bạn có thể kiểm tra lại như sau:

Bước 1: Kiểm tra PID của mongod

root@mongodb-standalone:/etc/systemd# ps -ef |grep mongod |grep -v grep mongodb   475       1  0 14:59 ?        00:00:04 /usr/bin/mongod -config /etc/mongod.conf

Bước 2: Kiểm tra các giá trị ulimit của process trên (trong trường hợp này PID=475)

root@mongodb-standalone:/etc/systemd# cat /proc/475/limits Limit                     Soft Limit           Hard Limit           Units Max cpu time              unlimited            unlimited            seconds Max file size             unlimited            unlimited            bytes Max data size             unlimited            unlimited            bytes Max stack size            8388608              unlimited            bytes Max core file size        0                    unlimited            bytes Max resident set          unlimited            unlimited            bytes Max processes             64000                64000                processes Max open files            64000                64000                files Max locked memory         unlimited            unlimited            bytes Max address space         unlimited            unlimited            bytes Max file locks            unlimited            unlimited            locks Max pending signals       7837                 7837                 signals Max msgqueue size         819200               819200               bytes Max nice priority         0                    0 Max realtime priority     0                    0 Max realtime timeout      unlimited            unlimited            us

Chúng ta thấy giá trị của tham số "Max open files" đã được set là 64000.

Tiếp theo, để chạy MongoDB, chúng ta cần kiểm tra và tùy biến các tham số cấu hình (nếu muốn) và sau đó bắt đầu MongoDB:

sudo systemctl daemon-reload sudo systemctl enable mongod sudo systemctl start mongod

Kết quả khi MongoDB start thành công sẽ như sau:

ubuntu@mongodb-standalone:~$ sudo service mongod status ● mongod.service - MongoDB Database Server      Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)      Active: active (running) since Sat 2023-03-18 14:59:01 UTC; 30min ago        Docs: https://docs.mongodb.org/manual    Main PID: 475 (mongod)       Memory: 229.2M      CGroup: /system.slice/mongod.service              └─475 /usr/bin/mongod -config /etc/mongod.conf

Bắt đầu sử dụng MongoDB

Lúc này, MongoDB đã được start và bạn có thể kết nối vào database bằng cách chạy lệnh mongosh trên máy chủ cài MongoDB.

ubuntu@mongodb-standalone:~$ mongosh Current Mongosh Log ID: 6415d80bfe9ee8d719c45af1 Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.8.0 Using MongoDB: 6.0.5 Using Mongosh: 1.8.0 For mongosh info see: https://docs.mongodb.com/mongodb-shell/ test>

Ngay bây giờ, chúng ta đã kết nối thành công vào MongoDB và mặc định sẽ kết nối vào database có tên là "test".

Trước khi chúng ta bắt đầu, cần nhắc lại một số khái niệm trong MongoDB sẽ khác với các khái niệm trong các hệ quản trị cơ sở dữ liệu quan hệ. Trong MongoDB, cấu trúc tổ chức sẽ là: database -> collection -> document -> field.

Tạo mới database trong MongoDB với mongosh

Khi lần đầu kết nối vào MongoDB, chúng ta sẽ được kết nối vào một database trắng có tên là "test". Để xem danh sách các database có trong hệ thống, ta sử dụng lệnh:

test> show dbs admin           40.00 KiB config          48.00 KiB local           72.00 KiB

Lưu ý rằng db "test" không được liệt kê trong danh sách.

Để tạo mới một database, ta sử dụng lệnh use [tên-database]. Ví dụ, để tạo database mới có tên là "demo", ta thực hiện như sau:

test> use demo

Với lệnh trên, một database trắng có tên là "demo" sẽ được tạo ra và chúng ta sẽ tự động chuyển sang database "demo" để thao tác.

Tạo collection mới trong database

Có 2 cách để tạo collection trong MongoDB:

  1. Tạo bằng lệnh createCollection
  2. Tạo bằng cách thêm dữ liệu vào collection (collection sẽ được tạo nếu nó chưa tồn tại)

Tạo collection bằng lệnh createCollection Ta có thể tạo một collection mới có tên là "staff" bằng lệnh sau:

demo> db.createCollection("staff")

Tạo collection bằng lệnh insertOne Ta cũng có thể tạo collection bằng cách thêm dữ liệu vào. Collection sẽ tự động được tạo nếu nó chưa tồn tại. Ví dụ, để thêm một document vào collection "staff", ta thực hiện như sau:

demo> db.staff.insertOne({name: "Trinh Quoc Viet", age: "18", gender: "male", cert: ["AWS", "Azure"] })

Thêm dữ liệu vào collection

Để thêm một document vào collection, ta sử dụng lệnh insertOne.

Ví dụ, để thêm một staff mới có tên "Nguyen Hoang Anh", tuổi 21, giới tính nam, chứng chỉ "GCP" và "Azure", ta sẽ thực hiện như sau:

demo> db.staff.insertOne({name: "Nguyen Hoang Anh", age: "21", gender: "male", cert: ["GCP", "Azure"] })

Để thêm nhiều document vào collection, ta sử dụng lệnh insertMany:

demo> db.staff.insertMany([   { name: "Trinh Quoc Viet", age: "18", gender: "male", cert: ["AWS", "Azure"] },   { name: "Nguyen Van Anh", age: "20", gender: "female", cert: ["AWS", "CKA", "CKAD"] } ])

Truy vấn dữ liệu trong collection (hàm find)

Trong MongoDB, chúng ta sử dụng hàm find để truy vấn dữ liệu từ collection. Hàm find có thể nhận một query object để lọc dữ liệu. Nếu không có điều kiện lọc, nó sẽ trả về tất cả document của collection.

Sử dụng find() Ví dụ, để lấy tất cả staff trong collection "staff", ta thực hiện như sau:

demo> db.staff.find()

Sử dụng findOne() Hàm findOne() trả về document đầu tiên tìm thấy và có thể nhận một query object làm điều kiện lọc. Nếu không có điều kiện lọc, nó sẽ trả về document đầu tiên trong collection.

demo> db.staff.findOne()

Lọc dữ liệu Chúng ta có thể lọc dữ liệu theo các điều kiện. Ví dụ, để lọc các staff nam trong collection "staff", ta thực hiện như sau:

demo> db.staff.find({"gender": "male"})

Lọc field cần lấy kết quả bằng projection Đôi khi chúng ta chỉ cần lấy ra một số field cần thiết từ document. Để làm điều này, ta sử dụng tham số thứ hai trong hàm find gọi là projection. Ví dụ, để lấy ra thông tin tên và chứng chỉ của các staff nam, ta thực hiện như sau:

demo> db.staff.find({"gender": "male"}, {name: 1, cert: 1})

Update dữ liệu trong collection

Để update dữ liệu trong collection, chúng ta sử dụng hàm updateOne() hoặc updateMany(). Cả hai hàm này đều nhận một query làm điều kiện truy vấn để chọn ra các document cần update.

Hàm updateOne() Hàm updateOne() sẽ update document đầu tiên tìm thấy thỏa mãn điều kiện truy vấn. Ví dụ, để update tuổi của các staff nam thành 20, ta thực hiện như sau:

demo> db.staff.updateOne({"gender": "male"}, {$set: { "age": 20 }})

Hàm updateMany() Hàm updateMany() sẽ update toàn bộ các document thỏa mãn điều kiện truy vấn. Ví dụ, để update tuổi của tất cả staff nam thành 25, ta thực hiện như sau:

demo> db.staff.updateMany({"gender": "male"}, {$set: { "age": 25 }})

Xóa dữ liệu trong collection

Cũng tương tự như lệnh insert hay update, MongoDB cũng có hai hàm delete là deleteOne()deleteMany(). Cả hai hàm này đều có thể nhận một query làm điều kiện lọc.

Ví dụ xóa tất cả staff nữ

demo> db.staff.deleteOne({"gender": "female"})

Ví dụ xóa toàn bộ staff nam

demo> db.staff.deleteMany({"gender": "male"})

Một số thao tác khác với db và collection

Liệt kê danh sách collection trong db

db.getCollectionNames()

Xóa một collection

db.collection_name.drop() db.staff.drop()

Xóa một database

db.dropDatabase()

Hy vọng với bài viết này, bạn đã có thể cài đặt MongoDB và thực hiện các thao tác cơ bản với MongoDB. Nếu bạn thấy bài viết hữu ích, hãy ủng hộ bằng cách upvote để mình có động lực viết bài tiếp theo. Hẹn gặp mọi người ở phần tiếp theo!

1