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