Điện thoại/ Zalo
0389934723
Bài 8: Truy vấn dữ liệu trong MongoDB
Ở bài trước mình đã giới thiệu với mọi người các cách insert dữ liệu vào trong MongoDB rồi, bài này chúng ta tiếp tục tìm hiểu về cách truy vấn dữ liệu trong MongoDB.
1, Lấy tất cả dữ liệu trong Collection.
-Để lấy tất cả dữ liệu ở trong collection chúng ta sử dụng phương thức find()
với cú pháp:
db.collectionName.find()
Trong đó: collectionName
là tên của collection mà các bạn muốn truy vấn.
-Tuy nhiên, khi chỉ sử dụng mỗi phương thức find thì dữ liệu trả về sẽ dưới dạng object nhưng không theo một cấu trúc nào cả.
VD: Lấy tất cả dữ liệu đang có trong Collection admin.
db.admin.find()
Hình minh họa
–Dựa vào chức năng của hàm find()
thì chúng ta có thể so sánh nó tương đương như câu lệnh Select * from
trong SQL.
-Và nếu như bạn muốn dữ liệu được trả về được hiển thị theo cấu trúc đã được định sẵn thì chỉ cần thêm hàm pretty() vào phía sau hàm find().
Cú Pháp:
db.collectionName.find().pretty()
VD: Lấy hết dữ liệu trong collection admin.
db.admin.find().pretty()
Hình minh họa
2, Truy vấn có điều kiện trong MongoDB.
-Để truy vấn có điều kiện trong MongoDB thì bạn cũng sử dụng cú pháp tương tự như phần 1, nhưng lúc này chúng ta sẽ chèn thêm điều kiện vào trong hàm find() với cú pháp sau:
db.collection.find(condition)
Trong đó:
collectionName
là tên của collection mà các bạn muốn truy vấn.condition
là object chứa mệnh đề điều kiện. Theo các cú pháp sau đây:
Phép Toán | Cú Pháp | Ví dụ | Câu lệnh tương ứng trong SQL |
Bằng (Equality) | {key: value} | db.admin.find({name: “Vu Thanh Tai” }).pretty() | .. WHERE name = “Vu Thanh Tai” |
Nhỏ hơn (Less Than ) | {key: {$lt: value}} | db.admin.find({age: { $lt: 18}).pretty() | … WHERE age < 18 |
Nhỏ hơn bằng (Less Than Equals) | {key: {$lte: value}} | db.admin.find({age: { $lte: 18}).pretty() | … WHERE age <= 18 |
Lơn hơn (Greater Than) | {key: {$gt: value}} | db.admin.find({age: { $gt: 12}).pretty() | … WHERE age > 12 |
Lớn hơn bằng (Greater Than Equals) | {key: {$gte: value}} | db.admin.find({age: { $gte: 12}).pretty() | … WHERE age >= 12 |
Khác (Not Equals) | {key: {$ne: value}} | db.admin.find({age: { $ne: 12}).pretty() | … WHERE age != 12 |
Trong ( In) | {key: {$in: [value1, value2,..]}} | db.admin.find({age: { $in: [12, 18]}).pretty() | … WHERE age IN (12, 18) |
Không Thuộc (Not In) | {key: {$nin: [value1, value2,..]}} | db.admin.find({age: { $nin: [12, 18]}).pretty() | … WHERE age NOT IN (12, 18) |
VD: in ra tất cả các admin có tên là Vu Thanh Tai có trong colletion admin.
db.collection.find({name: "Vu Thanh Tai"}).pretty()
Hình minh họa
3, Truy vấn nhiều điều kiện trong MongoDB.
-Trong MongoDB cũng có hỗ trợ chúng ta truy vấn nhiều điều kiện trên một lần khai báo, với các toán tử AND,OR Như trong SQL.
AND
-Để thực hiện phép toán này thì các bạn chỉ cần thêm các điều kiện cảu câu truy vấn vào trong object chứa điều kiện bind vào trong phương thức find.
VD: Lấy ra admin có tên Vũ Thanh Tài và có tuổi là 18 trong collection admin.
db.admin.find({
name: "Vu Thanh Tai",
age: 18
})
Hình minh họa
-Tương tự, nếu như bạn muốn and bao nhiêu điều kiện thì thêm bấy nhiêu vào trong object.
OR
-Để sử dụng mệnh đề or (hoặc) trong MongoDB thì chúng ta cần phải truyền một key scope có tên là $or
vào làm key chứa mảng các điều kiện hoặc, theo cú pháp:
db.collectionName.find({
$or : [
{key1: value1},
{key2: value2},
...,
{keyn: valuen}
]
}).pretty()
VD: Lấy ra tất cả các admin có tuổi bằng 12 hoặc name là Vu Thanh Tai trong collection admin
db.admin.find({
$or : [
{age: 12},
{name: "Vu Thanh Tai"},
]
}).pretty()
Hình minh họa
Kết hợp cả AND và OR.
-Để kết hợp giữa AND và OR thì bạn chỉ cần làm tương tự như cách thực hiện truy vấn AND, và nếu truy vấn nào là or thì object đó lại làm tương tự như truy vấn OR.
VD: Lấy ra tất cả các admin có tuổi bằng 12 hoặc password bằng admin và có name là Vu Thanh Tai trong collection admin.
db.admin.find({
$or : [
{age: 12},
{password: "admin"},
],
name: "Vu Thanh Tai"
}).pretty()
Hình minh họa
4, Chọn lọc các trường cần lấy ra trong MongoDB.
-Để chọn lọc các trường cần hiển thị ra trong 1 collection thì các bạn sử dụng phương thức find() với cú pháp sau:
db.collectionName.find(objectwhere,objectselect)
Trong đó:
objectwhere
là object chứa các điều kiện ở các phần trên. Nếu bạn không muốn lọc theo điều kiện thì bạn để một object rỗng vào.objectselect
là obejct chứa các trường dữ liệu cần lấy ra. Mặc định thì nó sẽ lấy cả _id, nên nếu như bạn không muốn hiển thị _id thì bạn cần thêm_id: 0
vào object.
VD: Lấy ra trường _id, name, password của tất cả các document có trong collection admin.
db.admin.find({},{name: 1,password: 1}).pretty()
hình minh họa
VD: Lấy ra name,password của những bản ghi có name = Vu Thanh Tai có trong admin collection.
db.admin.find({name: "Vu Thanh Tai"},{name: 1, password: 1, _id: 0}).pretty()
hình minh họa
5, Lời kết.
-Như vậy phần này mình đã giới thiệu đến mọi người các câu lệnh lấy ra dữ liệu trong Collection cơ bản rồi. Bài tiếp theo chúng ta sẽ tìm hiểu về cách sắp sếp và giới hạn số lượng bản ghi được lấy ra trong Colletion.