STACKJAVA

Truy vấn dữ liệu/document, find(), Select, Where trong MongoDB

This entry is part 10 of 24 in the series 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/

Series Navigation<< Insert document, bản ghi trong MongoDB (Insert bằng lệnh, Robo3T)Xóa document, row trong MongoDB (bằng dòng lệnh, Robo3T) >>