1. Cài đặt MongoDB
Trên window
Truy cập vào url: https://www.mongodb.com/try/download/community
- Phiên bản Community là phiên bản dành cho cộng đồng miễn phí
- Version: 5.0.2(current) - tại thời điểm tháng 9/2021
- Platform: Windows
- Package: msi
Trên Ubuntu
// Cập nhật phiên bản phần mềm
sudo apt update
// Cài mongoDB
sudo apt install mongodb
// Kiểm tra mongoDB cài được chưa?
sudo systemctl status mongodb
2. Kiểm tra mongoDB
// Đối với window khi chưa cài biến môi trường,
// thì ta phải vào tận nơi cài đặt, mở cmd tại đây
C:\Program Files\MongoDB\Server\5.0\bin
// Khởi động mongoDB
mongo
// Kết quả
MongoDB shell version v5.0.2
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("4246f2ac-0933-47cd-9e7c-09b8730ed98e") }
MongoDB server version: 5.0.2
// Thoát mongoDB
exit
// Kết quả
bye
3. Thao tác với database
3-1. Xem danh sách
show dbs
// Kết quả
admin 0.000GB
config 0.000GB
local 0.000GB
3-2. Tạo DB mới hoặc sử dụng DB có sẵn
use <new_database>
// Ví dụ
use shopping_app
// Kết quả
switched to db shopping_app
3-3. Xem đang sử dụng DB nào
db
// Kết quả
shopping_app
3-4. Xóa DB
use <db_name>
db.dropDatabase()
// Ví dụ
use shopping_app
db.dropDatabase()
// Kết quả
> use shopping_app
switched to db shopping_app
> db.dropDatabase()
{ "ok" : 1 }
3-5. Import DB từ CSV
Kể từ Version 4.4.0, bạn phải cài đặt thêm MongoDB Database Tools để import, export data.
Link hướng dẫn: https://docs.mongodb.com/database-tools/installation/installation/
Link cài đặt: https://www.mongodb.com/try/download/database-tools
// Đối với window khi chưa cài biến môi trường,
// thì ta phải vào tận nơi cài đặt, mở cmd tại đây
C:\Program Files\MongoDB\Tools\100\bin
mongoimport --type csv -d <db_name> -c <collection_name> --headerline --drop /path/to/file.csv
--type: kiểu là csv
-d: tên database
-c: tên collection
--headerline: bỏ đi dòng đầu của file csv
--drop: nếu database đã tồn tại thì xóa và tạo mới
/path/to/file.csv: đường dẫn tới file csv
// Ví dụ
mongoimport --type csv -d shopping_app -c users --headerline --drop D:\backup\db-shopping-app.csv
3-6. Import DB từ JSON
mongoimport --type json -d <db_name> -c <collection_name> --drop /path/to/file.json
// Ví dụ
mongoimport --type json -d shopping_app -c users --drop D:\backup\db-shopping-app.json
3-7. Export DB
mongodump --db <db_name> --out /path/to
mongodump --db <db_name> --out /path/to --gzip
--out: chỗ lưu database
// Ví dụ
mongodump --db shopping_app --out D:\backupDB
mongodump --db shopping_app --out D:\backupDB --gzip
4. Collection
4-1. Xem collections
show collections
4-2. Thêm collection
db.category.insert({name: 'Laptop'})
// Hoặc
db.createCollection('Laptop')
// Kết quả
{ "ok" : 1 }
4-3. Sửa collection
db.<collection_name>.renameCollection('new_name')
// Ví dụ
db.users.renameCollection('Users')
// Kết quả
{ "ok" : 1 }
4-4. Xóa collection
db.<collection_name>.drop()
// Ví dụ
db.users.drop()
// Kết quả
true
4-5. Export collection ra json
mongoexport --db <db_name> --collection <collection_name> --out /path/to
// Ngắn gọn
mongoexport -d <db_name> -c <collection_name> -o /path/to
// Ví dụ
mongoexport -d shpping_app -c users -o "D:\backupDB\collectionUsers.json"
4-6. Export collection ra csv
mongoexport -d <db_name> -c <collection_name> --type csv -o /path/to -f id,first_name,last_name
-f: các field muốn export
// Ví dụ
mongoexport -d shopping_app -c users --type csv -o "D:\backupDB\collectionUsers.json" -f id,first_name,last_name
4-7. Import collection từ json
mongoimport -d <db_name> -c <collection_name> --file /path/to/file.json
4-8. Import collection từ csv
mongoimport --d <db_name> -c <collection_name> --type csv --file /path/to/file.csv
5. Query data
db.<collection_name>.find(query)
db.<collection_name>.findOne(query)
collection_name: tên của collection
find: trả về tất cả dữ liệu
findOne: trả về dữ liệu đầu tiên
query: là một object mô tả bên dưới
/*==============================*/
find({}) // tìm tất cả
{key: value} // So sánh bằng
{age: 69} // tìm với tuổi bằng 69
{key: {$ne: value}} // So sánh không bằng
{age: {$ne: 69}} // tìm với tuổi khác 69
{key: {$gt: value}} // Nhỏ hơn
{age: {$gt: 69}} // tìm với tuổi nhỏ hơn 69
{key: {$gte: value}} // Nhỏ hơn bằng
{age: {$gte: 69}} // tìm với tuổi nhỏ hơn bằng 69
{key: {$lt: value}} // Lớn hơn
{age: {$lt: 69}} // tìm với tuổi lớn hơn 69
{key: {$lte: value}} // Lớn hơn bằng
{age: {$lte: 69}} // tìm với tuổi lớn hơn bằng 69
{key: {$in: value}} // Nằm trong những giá trị này
{age: {$in: [36, 49, 50]}} // tìm với tuổi bằng 36-49-50
{key: {$nin: value}} // Không nằm trong những giá trị này
{age: {$nin: [36, 49, 50]}} // tìm với tuổi khác 36-49-50
{key: value} // Áp dụng được với regex
{email: /\.gmail$/} // tìm với email kết thúc bằng .gmail
{ip_address: /^1/} // tìm với ip bắt đầu bằng 1
6. Multi-field query
Điều kiện AND
db.<collection_name>.find(
{ key1: value1, key2: value2 }
)
// tìm với điều kiện giới tính là 'Male' và tuổi lớn hơn 69
{gender: 'Male', age: {$lt: 69}}
Điều kiện OR
db.<collection_name>.find({
$or: [
{ key1: value1 },
{ key2: value2 }
]
})
// tìm với điều kiện giới tính là 'Male' hoặc tuổi lớn hơn 69
{
$or: [
{ gender: 'Male' },
{ age: {$lt: 69} }
]
}
7. Nested object
Cách tìm khi value dạng object
// document trong mongoDB
{
...
profile: {
city: 'Hanoi',
work: '2B Company'
}
}
// tìm với điều kiện profile city là Hanoi
db.<collection_name>.find({ profile.city: 'Hanoi' })
8. Array field
Cách tìm khi value dạng array
// document trong mongoDB
{
...
languages: ['English', 'Japanese', 'Vietnamese']
}
// tìm với điều kiện languages là English
db.<collection_name>.find({ languages: 'English' })
// document trong mongoDB
{
...
languages: ['English', 'Japanese', 'Vietnamese']
}
// tìm với điều kiện languages có chứa 2 giá trị
db.<collection_name>.find({ languages: { $size: 2 }})
9. Array of embedded documents
Cách tìm khi value dạng array các object
// document trong mongoDB
{
...
pets: [
{type: 'cat', name: 'Linnea'},
{type: 'dog', name: 'Tom'},
{type: 'cat', name: 'Kylie'}
]
}
// tìm với điều kiện pets type là cat
db.<collection_name>.find({
pets.type: 'cat'
})
// Hoặc
db.<collection_name>.find({
pets: {
$elementMatch: { type: 'cat' }
}
})
10. Query empty field
Cách tìm khi document không có field
// data
{first_name: 'ken', last_name: 'trung'}
{first_name: 'thu', last_name: 'thuy', age: 18}
// tìm với điều kiện có field age
db.<collection_name>.find({ age: null })
// Hoặc
db.<collection_name>.find({ age: { $exists: false }})
11. $where
Giá trị nhận vào của $where
là string
db.<collection_name>.find({ $where: 'javascript expression' })
// Ví dụ
db.<collection_name>.find({ first_name: 'ken' })
db.<collection_name>.find({ $where: 'this.first_name === "ken"' })
db.<collection_name>.find({ $where: 'this.first_name === this.last_name' })
12. Pagination
// trả về số lượng, không trả về dữ liệu
db.<collection_name>.count(query)
// bỏ qua X phần tử và chỉ lấy Y phần tử
db.<collection_name>.find(query).skip(x).limit(y)
13. Sort
db.<collection_name>.find(query).sort({ field: -1 })
1: ascending order (tăng dần)
-1: descending order (giảm dần)
14. CRUD
db.<collection_name>.save()
db.<collection_name>.insert(data)
db.<collection_name>.insertMany(datas)
db.<collection_name>.find(query)
db.<collection_name>.findOne(query)
db.<collection_name>.updateOne(query, data)
db.<collection_name>.updateMany(query, data)
db.<collection_name>.delete(query)
db.<collection_name>.deleteOne(query)
// insert-document.js
db.users.insert({
first_name: 'ken',
last_name: 'trung'
})
load('script/insert-document.js')
var user = {}
user.first_name = 'ken'
user.last_name = 'trung'
db.<collection_name>.save(user)
// Tìm document có _id là gì, sau đó update trường first_name
db.<collection_name>.updateOne(
{ _id: ... },
{ $set: {first_name: 'ken' }}
)
// Tìm document có _id là gì, sau đó update language nằm trong settings
// Trường settings là array và ta chỉ muốn update 1 trường trong đó
db.<collection_name>.updateOne(
{ _id: ... },
{ $set: {settings.languages: 'vn' }}
)
15. Atomic operator
// $inc: tăng - giảm số lượng
// $push: thêm 1 data vào mảng
// $pull: xóa 1 data ra khỏi mảng
// $addToSet: nếu chưa có thì thêm, có rồi thì chỉ update
db.<collection_name>.updateOne(
{_id: ...},
{$inc: {viewCount + 1}}
)