Chương 3: MongoDB - Truy vấn có điều kiện
Chương này giới thiệu về truy vấn có điều kiện trong MongoDB, tương tự như các toán tử so sánh như bằng, lớn hơn, và nhỏ hơn trong các câu lệnh SQL.
Các Toán Tử Điều Kiện Được Hỗ Trợ Bởi MongoDB
Toán tử | Mô tả |
---|---|
$eq | Bằng, tương tự như toán tử = trong SQL |
$gt | Lớn hơn, tương tự như toán tử > trong SQL |
$gte | Lớn hơn hoặc bằng, tương tự như toán tử >= trong SQL |
$in | Khớp với một mảng, bất kỳ giá trị nào, tương tự như truy vấn in trong SQL |
$lt | Nhỏ hơn, tương tự như toán tử < trong SQL |
$nin | Không khớp với bất kỳ giá trị nào trong mảng, tương tự như toán tử not in trong SQL |
Dữ Liệu Kiểm Tra
Dữ liệu bộ sưu tập kho là như sau
{ _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] }
{ _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] }
{ _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] }
{ _id: 4, item: { name: "xy", code: "456" }, qty: 30, tags: [ "B", "A" ] }
{ _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] }
$eq (Khớp Bằng)
db.inventory.find( { qty: { $eq: 20 } } )
db.inventory.find( { "item.name": { $eq: "ab" } } )
// Rút gọn, có thể bỏ qua toán tử $eq, qty = 20
db.inventory.find( { qty: 20 } )
Tương đương SQL:
select * from inventory where qty = 20
// Đây chỉ là một ví dụ, SQL không hỗ trợ định dạng trường lồng như item.name
select * from inventory where item.name = 20
$gt (Lớn Hơn)
db.inventory.find( { qty: { $gt: 20 } } )
Tương đương SQL:
select * from inventory where qty > 20
$gte (Lớn Hơn Hoặc Bằng)
db.inventory.find( { qty: { $gte: 20 } } )
Tương đương SQL:
select * from inventory where qty >= 20
$in
Khớp với một giá trị trong mảng
db.inventory.find( { qty: { $in: [ 5, 15 ] } } )
Tương đương SQL:
select * from inventory where qty in (5, 15)
$nin
Đối ngược với toán tử $in
db.inventory.find( { qty: { $nin: [ 5, 15 ] } } )
Tương đương SQL:
select * from inventory where qty not in (5, 15)
$lt (Nhỏ Hơn)
db.inventory.find( { qty: { $lt: 20 } } )
Tương đương SQL:
select * from inventory where qty < 20