บทที่ 3: MongoDB - คิวรีที่มีเงื่อนไข
บทนี้จะแนะนำเกี่ยวกับคิวรีที่มีเงื่อนไขของ MongoDB ซึ่งคล้ายกับเอกสาร SQL ที่มีตัวดำเนินการในการเปรียบเทียบเช่นเท่ากับ มากกว่า และน้อยกว่า
ตัวดำเนินการที่รองรับโดย MongoDB
ตัวดำเนินการ | รายละเอียด |
---|---|
$eq | เท่ากับ, คล้ายกับตัวดำเนินการ = ใน SQL |
$gt | มากกว่า, คล้ายกับตัวดำเนินการ > ใน SQL |
$gte | มากกว่าหรือเท่ากับ, คล้ายกับตัวดำเนินการ >= ใน SQL |
$in | ตรงกับอาร์เรย์, ค่าใดค่าหนึ่ง, คล้ายกับคิวรี in ใน SQL |
$lt | น้อยกว่า, คล้ายกับตัวดำเนินการ < ใน SQL |
$nin | ไม่ตรงกับค่าใดค่าหนึ่งในอาร์เรย์, คล้ายกับตัวดำเนินการ not in ใน SQL |
ข้อมูลการทดสอบ
ข้อมูลคอลเลคชันของคลังสินค้า ดังนี้
{ _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 (ค่าเท่ากับ)
db.inventory.find( { qty: { $eq: 20 } } )
db.inventory.find( { "item.name": { $eq: "ab" } } )
// ย่อลง, สามารถละลายตัวดำเนินการ $eq ได้, qty = 20
db.inventory.find( { qty: 20 } )
SQL เทียบเท่า:
select * from inventory where qty = 20
// นี่เป็นตัวอย่างเท่านั้น, SQL ไม่รองรับรูปแบบของฟิลด์ที่ซ้อนกัน เช่น item.name
select * from inventory where item.name = 20
$gt (มากกว่า)
db.inventory.find( { qty: { $gt: 20 } } )
SQL เทียบเท่า:
select * from inventory where qty > 20
$gte (มากกว่าหรือเท่ากับ)
db.inventory.find( { qty: { $gte: 20 } } )
SQL เทียบเท่า:
select * from inventory where qty >= 20
$in (ตรงกับ)
ตรงกับค่าใดค่าหนึ่งในอาร์เรย์
db.inventory.find( { qty: { $in: [ 5, 15 ] } } )
SQL เทียบเท่า:
select * from inventory where qty in (5, 15)
$nin (ไม่ตรงกับ)
กลับค่าไม่ตรงกับในอาร์เรย์
db.inventory.find( { qty: { $nin: [ 5, 15 ] } } )
SQL เทียบเท่า:
select * from inventory where qty not in (5, 15)
$lt (น้อยกว่า)
db.inventory.find( { qty: { $lt: 20 } } )
SQL เทียบเท่า:
select * from inventory where qty < 20