- MongoDB là gì? Các khái niệm trong MongoDB
- Hướng dẫn cài đặt, cấu hình MongoDB trên Windows 10
- Cài đặt và sử dụng Robo 3T (RoboMongo) trên Windows
- Hướng dẫn cài đặt MongoDB trên Linux (Ubuntu 16.04)
- Hướng dẫn MongoDB – Tạo database trong MongoDB
- Hướng dẫn MongoDB – Xóa, DROP database trong MongoDB
- Tạo bảng, collections trong MongoDB (Tạo bằng dòng lệnh, Robo3t)
- Xóa bảng, collections trong MongoDB (Xóa bằng lệnh/ Robo3T)
- Insert document, bản ghi trong MongoDB (Insert bằng lệnh, Robo3T)
- Truy vấn dữ liệu/document, find(), Select, Where trong MongoDB
- Xóa document, row trong MongoDB (bằng dòng lệnh, Robo3T)
- Update document, dữ liệu trong MongoDB
- Projection trong MongoDB (SELECT field/column trong MongoDB)
- Sắp xếp trong MongoDB(orderBy, sorting() trong MongoDB)
- Ưu nhược điểm của MongoDB, khi nào nên dùng MongoDB
- Xóa cột, field, trường của collections trong MongoDB ($unset)
- Kiểm tra null, check tồn tại trong MongoDB với $exists
- Đổi tên field trong MongoDB với $rename
- Tạo user/roles, phân quyền người dùng trên MongoDB
- Các loại roles, vai trò, quyền trong MongoDB.
- Đăng nhập mongodb với username và password (database mongo)
- Tạo Replica Set trong MongoDB, Ví dụ Replica Set MongoDB
- Replication, Replica Set trong MongoDB là gì?
- Phân trang trong MongoDB (skip(), limit() paging trong MongoDB)
Truy vấn dữ liệu, document – find(), Select, Where trong MongoDB
find(): Trong MongoDB, không có tập ngôn ngữ truy vấn cơ sở dữ liệu như trong SQL. Thay vì dùng câu lệnh SELECT như trong SQL, với MongoDB ta dùng method find() với các tham số cần truy vấn.
Truy vấn dữ liệu trong MongoDB find(), findOne()
Cú pháp:
Để truy vấn, query dữ liệu trong MongoDB ta dùng method find()
:
db.COLLECTION_NAME.find()
Nếu không truyền tham số nào vào trong method find() thì nó sẽ lấy ra tất cả các document bên trong collection.
Ví dụ lấy ra tất cả các document trong collection customer
của database stackjava
:
(Xem lại: insert document vào database)
Nếu bạn chỉ muốn lấy một document / bản ghi duy nhất thì thay method find()
bằng method findOne()
Định dạng dữ liệu kết quả pretty()
Nếu bạn muốn hiển thị kết quả dưới dạng json format thì dùng thêm lệnh pretty()
ở phía sau lệnh find()
db.COLLECTION_NAME.find().pretty()
Ví dụ:
Truy vấn theo điều hiện, mệnh đề WHERE trong MongoDB
Dữ liệu trong MongoDB không phải là dữ liệu quan hệ nên các điều kiện truy vấn của nó đơn giản hơn nhiều.
Dưới đây là một số phương thức truy vấn data/ document trong MongoDB:
Điều kiện | Cú pháp | Ví dụ | SQL tương ứng |
---|---|---|---|
So sánh bằng | {<key>:<value>} | db.customer.find({“name”:”kai”}) | where name= ‘kai’ |
So sánh like | {<key>:<regex>} | db.customer.find({“name”:/a/}) | where name like ‘%kai%’ |
So sánh nhỏ hơn | {<key>:{$lt:<value>}} | db.customer.find({“age”:{$lt:50}}) | where age < 50 |
So sánh nhỏ hơn hoặc bằng | {<key>:{$lte:<value>}} | db.customer.find({“age”:{$lte:50}}) | where age <= 50 |
So sánh lớn hơn | {<key>:{$gt:<value>}} | db.customer.find({“age”:{$gt:50}}) | where age > 50 |
So sánh lớn hơn hoặc bằng | {<key>:{$gte:<value>}} | db.customer.find({“age”:{$gte:50}}) | where age >= 50 |
So sánh khác | {<key>:{$ne:<value>}} | db.customer.find({“age”:{$ne:50}}) | where age != 50 |
Ví dụ tìm tất cả các document trong collection customer có name bắt đầu bằng ‘ka’
db.customer.find({"name":/^ka/})
Ví dụ tìm tất cả các document trong collection customer có name kết bằng ‘pe’
db.customer.find({"name":/pe$/})
Sử dụng kết hợp AND, OR trong điều kiện truy vấn
Để truy vấn theo nhiều điều kiện cùng lúc AND
ta dùng cú pháp sau: $and
đi kèm với mảng các điều kiên
{$and: [{key1: value1}, {key2:value2}]}
Tương tự với OR ta dùng cú pháp sau: $or
đi kèm với mảng các điều kiên
{$or: [{key1: value1}, {key2:value2}]}
Ví dụ tìm document có name = ‘kai’ và địa chỉ có chứa ‘na’:
db.customer.find({$and: [{"name": "kai"}, {"address":/na/}]})
* Lưu ý: khi dùng and hoặc or, nếu muốn kiểm tra nhiều điều kiện trên cùng một field/column thì ta gôp chung nó vào thành một mệnh đề:
Ví dụ: muốn tìm tất cả các document trong collection customer
có age > 10 và age < 30 thì câu lệnh của ta như sau:
db.customer.find( {$and:[{'date': {$gte: 10 , $lte: 30}}]} )
Chứ không phải tách điều kiện date thành 2 lần check như dưới đây:
db.customer.find( {$and:[{'date': {$gte: 10}}, {'date': {$lte: 30}}]} )
$in
Sử dụng $in
khi muốn so sánh 1 field nằm trong một mảng không;
Ví dụ: tìm customer có address = ‘vietnam’ hoặc address = ‘japan’:
db.customer.find({'address':{$in: ['vietnam', 'address']}})
Truy vấn dữ liệu, document – find(), Select, Where trong MongoDB. stackjava.com
Okay, Done!
References: https://docs.mongodb.com/manual/mongo/