KiemTienOnline360

Chia sẻ hành trình kiếm tiền online bắt đầu từ con số 0

Kiến thức lập trình, Kỹ nghệ phần mềm

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

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

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

Chia sẻ bài viết
0
(0)

Cài đặt MongoDB

Cài đặt trên Ubuntu

Chi tiết cài đặt tham khảo bài viết: How to Install MongoDB on Ubuntu 16.04

Các lệnh cài đặt như sau:

// Cài đặt
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
sudo apt-get update
sudo apt-get install -y mongodb-org

// Kiểm tra
mongo --version

Các lệnh start/stop server:

// Mongo tự động chạy khi server bật
sudo systemctl enable mongod

// Start mongo
sudo systemctl start mongod

// Restart mongo
sudo systemctl restart mongod

// Xem trạng thái mongo
sudo systemctl status mongod

Mặc định sau khi cài đặt thì chỉ cho phép kết nối DB qua local thôi, để có thể kết nối từ client bất kỳ bạn phải sửa têp /etc/mongod.conf:
Tìm dòng:
bindIp: 127.0.0.1
thành
bindIp: 0.0.0.0

Sau đó restart lại mongo. Việc mở thế này rất rủi ro, vì thế bạn phải cấu hình Firewall để chỉ một số IP có thể kết nối đến thôi.

Cài đặt trên Windows

Trên Windows bạn chỉ cần tải tệp cài đặt về rùi chạy. Chi tiết xem: Cài đặt cơ sở dữ liệu MongoDB trên Windows

Một số thao tác cơ bản trên MongoDB

Lệnh kết nối vào tạo Database

Lệnh kết nối database:

// Kết nối DB trên local, không yêu cầu xác thực
mongo mongodb://127.0.0.1/MyDatabase

// Kết nối DB trên local, có yêu cầu xác thực
mongo mongodb://testuser:MatKhauManh@127.0.0.1/MyDatabase

Một số lệnh cơ bản trên DB

// Hiển thị các DB hiện có
show databases
show dbs

// Chọn một DB
use MyDatabase

// Xóa một Database
user MyDatabase
db.dropDatabase()

// Hiển thị các Collections trong DB hiện tại
show collections

// Lệnh tạo một collection mới
db.createCollection("NewCollection")

// Lệnh xóa 1 collection
db.NewCollection.drop()

// Thao tác trên 1 collection
db.<Collection>.<function>(<param>)
db.getCollection("<Collection>".<function>(<param>)

Để tạo DB mới thì bạn sử dụng lệnh use, sau đó tạo ít nhất 1 collection trên DB mới:

use NewDatabase
db.createCollection("users")

Tạo user cho một database

Để tạo user cho DB, bạn sử dụng lệnh sau:

use MyDatabase
db.createUser({user:"testuser", pwd:"MatKhauManh", roles:[{ role: "root", db: "admin" }]});

Sau khi tạo xong bạn có thể thử kết nối đến DB bằng lệnh:

mongo mongodb://testuser:MatKhauManh@localhost/NewDatabase

Xuất nhập dữ liệu

Để xuất dữ liệu ta dụng lệnh mongodump trên command line:

mongodump --uri mongodb://testuser:MatKhauManh@localhost/MyDatabase -o backup

Để import dữ liệu ta dùng lệnh mongostore:

mongorestore --uri mongodb://testuser:MatKhauManhj@127.0.0.1/MyDatabase --dir ./backup

Thao tác trên các Collections

Một số lệnh thao tác cơ bản

Cú pháp chung thao tác chung với Collection:

// Cú pháp chung
db.[Tên collection].[Tên hàm 1]([Tham số]).[Tên hàm 2]([Tham số])...

Một số lệnh hay dùng:

// Đếm số bản ghi trong một collection
db.MyCollection.countDocuments({})
db.MyCollection.countDocuments({name: "test"})

// Đổi tên collection
db.MyCollection.renameCollection("NewCollection")

// Hiển thị tất cả bản ghi
db.MyCollection.find({})

// Tìm và hiển thị 10 bản ghi
db.MyCollection.find({}).limit(10)

// Tìm và hiển thị 10 bản ghi nhưng hiển thị dễ nhìn hơn
db.MyCollection.find({}).limit(10).pretty()

// Hiển thị 10 bản ghi mới nhất
db.MyCollection.find({}).sort({createdAt: -1}).limit(10).pretty()

Copy bảng ghi collection sang collection khác

Cách 1: Sử dụng lệnh clone qua hàm:

// Chạy 1 lệnh
db.runCommand(command)

// Ví dụ => Chưa chạy thật :))
use marketing
db.runCommand( { clone: "db1.example.net:27017" })

Cách 2: Sử dụng kết hợp lệnh find() và insert() như sau:

Copy trong cùng Database:

use MyDatabase
db.createCollection("MyCollection_BK");
db.MyCollection.find({}).forEach(function(item) {
  db.MyCollection_BK.insert(item);
});

Copy trên Database khác nhau:

use MyDatabase
db.MyCollection.find({}).forEach(function(item) {
  db.getSiblingDB('MyOtherDatabase')['MyOtherCollection'].insert(item);
});

Tìm kiếm các bản ghi theo yêu cầu

Bạn sử dụng lệnh find(), findOne() để tìm kiếm các bản ghi theo yêu cầu của mình. Ngoài ra bạn có thể kết hợp với lệnh sort(), limit(), pretty() để nhiều cách hiển thị hơn. Cú pháp như sau:

db.<Collection>.find(<CONDITION>)
db.<Collection>.findOne(<CONDITION>)

Trong đó CONDITION theo chuẩn JSON và khá linh hoạt:

// Điều kiện bằng đơn giản
{name: "test"}

// Điều kiện lớn hơn nhỏ hơn với $lt, $lte, $gt, $gte
{name: "test", quantity: { $lt: 1250 } }
{name: "test", quantity: { $lt: 1550, $gt: 3000 } }

Thêm bản ghi vào collection

Sử dụng hàm insert() để thêm dữ liệu cho 1 collection:

// Cú pháp lệnh
db.<Collection>.insert(document)

// Ví dụ 1 lệnh thêm
db.softwares.insert({
   title: "MongoDB",
   description: "MongoDB is no sql database",
})

Cập nhật bản ghi vào collection

Sử dụng hàm update(), updateOne() để cập nhật dữ liệu cho 1 bản ghi. Sử dụng updateMany() để cập nhật dữ liệu cho nhiều bản ghi.

// Cú pháp lệnh
db.<COLLECTION_NAME>.update(<CONDITION>, <UPDATED_DATA>)
db.<COLLECTION_NAME>.updateOne(<CONDITION>, <UPDATED_DATA>)
db.<COLLECTION_NAME>.updateMany(<CONDITION>, <UPDATED_DATA>)

// Ví dụ lệnh
db.softwares.update({title: "MongoDB"}, { $set: { description: "It is only MongoDB" } })

Phần CONDITION bạn có thể xem ở phần trên, phần UPDATED_DATA cũng rất linh hoạt:

// Thiết lập giá trị mới cho 1 trường dữ liệu sử dụng $set
{ $set: { orderId: "678974329166" } }

// Cập nhật giá trị cho 1 phần tử trong mảng
// Dữ liệu bảng có trường symbol và transactions. Trong đó transactions là một mảng
// Cập nhật trường entryTime của phần tử thứ 0 trong mảng
db.investingtrans.updateOne({symbol: "TKOUSDT"}, { $set: { "transactions.0.entryTime": "2021-09-07 22:39:44" }}, { upsert: true })
// Cập nhật trường entryTime cho tất cả các phần tử trong mảng
db.investingtrans.updateOne({symbol: "TKOUSDT"}, { $set: { "transactions.$[].entryTime": "2021-09-07 22:39:44" }}, { upsert: true })
// Bỏ một trường dữ liệu sử dụng $unset
{ $unset: { orderId: "" } }
{ $unset: { "assets.BNB": "" } }

Một số chú ý khi sử dụng NodeJs để thao tác Mongo

Trên NodeJs hầu hết mọi người sử dụng thư viện mongoose. Nói chung thư viện nào cũng được, nhưng ở đây có một số chú ý phần hiệu năng:

Nên đánh Index để tăng tốc độ truy vấn

Để đánh index trường nào thì bạn xem xét lại code các truy vấn DB của mình, từ đó chọn trường cho hợp lý.

Lệnh đánh index như sau:

db.pairinfos.createIndex({ network: 1, dexName: 1 });

Cập nhật từng bản ghi hay nhiều bản ghi

Bạn có thể cập nhật bản ghi bằng hàm sau:

  • Hàm save() => Cập nhật từng bản ghi 1
  • Hàm updateMany() => Cập nhật nhiều bản ghi theo điều kiện tìm thấy

Thông thường cập nhật 1 lúc nhiều bản ghi thì sẽ nhanh hơn, nhưng nhiều khi nó lại chậm hơn. Ví dụ: Bạn có CSDL hàng triệu bản ghi, lệnh của bạn trung bình chỉ cập nhật 10 bản ghi thì có khi cập nhật từng bản ghi sẽ nhanh hơn. Bởi chi phí tìm kiếm dữ liệu lớn trừ khi bạn có đánh index.

Ưu tiên thêm dữ liệu theo lô thay vì thêm từng bản ghi

Nếu bạn thêm đồng thời nhiều dữ liệu một lúc thì bạn không nên thêm từng bản ghi 1 mà phải thêm cả lô một lúc bằng hàm insertMany().

Tham khảo:

Bài viết này có hữu ích với bạn?

Kích vào một biểu tượng ngôi sao để đánh giá bài viết!

Xếp hạng trung bình 0 / 5. Số phiếu: 0

Bài viết chưa có đánh giá! Hãy là người đầu tiên đánh giá bài viết này.

Trả lời

Giao diện bởi Anders Norén