ใช้ Operator $gt (Greater Than) และ $lt (Less Than) สำหรับช่วง ไม่รวมขอบเขต (Exclusive) หรือ $gte และ $lte สำหรับ รวมขอบเขต (Inclusive)
ไวยากรณ์
// Exclusive: 50 < x < 60
db.collection.find({field: {$gt: 50, $lt: 60}});
// Inclusive: 50 <= x <= 60
db.collection.find({field: {$gte: 50, $lte: 60}});
สร้างคอลเลกชันและข้อมูลตัวอย่าง
> db.returnEverythingBetween50And60.insertOne({"Amount": 55});
{ "acknowledged": true, "insertedId": ObjectId("5cd3c42eedc6604c74817cdb") }
> db.returnEverythingBetween50And60.insertOne({"Amount": 45});
{ "acknowledged": true, "insertedId": ObjectId("5cd3c432edc6604c74817cdc") }
> db.returnEverythingBetween50And60.insertOne({"Amount": 50});
{ "acknowledged": true, "insertedId": ObjectId("5cd3c436edc6604c74817cdd") }
> db.returnEverythingBetween50And60.insertOne({"Amount": 59});
{ "acknowledged": true, "insertedId": ObjectId("5cd3c43aedc6604c74817cde") }
> db.returnEverythingBetween50And60.insertOne({"Amount": 60});
{ "acknowledged": true, "insertedId": ObjectId("5cd3c43eedc6604c74817cdf") }
> db.returnEverythingBetween50And60.insertOne({"Amount": 49});
{ "acknowledged": true, "insertedId": ObjectId("5cd3c442edc6604c74817ce0") }
> db.returnEverythingBetween50And60.insertOne({"Amount": 71});
{ "acknowledged": true, "insertedId": ObjectId("5cd3c445edc6604c74817ce1") }
แสดงข้อมูลทั้งหมด
> db.returnEverythingBetween50And60.find().pretty();
ผลลัพธ์: 7 เอกสาร (45, 49, 50, 55, 59, 60, 71)
ค้นหา Exclusive Range: 50 < Amount < 60
> db.returnEverythingBetween50And60.find({Amount: {$gt: 50, $lt: 60}});
ผลลัพธ์: เฉพาะ 55 และ 59
{"_id": ObjectId("5cd3c42eedc6604c74817cdb"), "Amount": 55}
{"_id": ObjectId("5cd3c43aedc6604c74817cde"), "Amount": 59}
ค้นหา Inclusive Range: 50 <= Amount <= 60
> db.returnEverythingBetween50And60.find({Amount: {$gte: 50, $lte: 60}});
ผลลัพธ์: 50, 55, 59, 60 (4 เอกสาร)
ตารางเปรียบเทียบ Operator
| Operator | ความหมาย | SQL เทียบเท่า |
|---|---|---|
$gt | Greater Than (มากกว่า) | > |
$gte | Greater Than or Equal (มากกว่าหรือเท่ากับ) | >= |
$lt | Less Than (น้อยกว่า) | < |
$lte | Less Than or Equal (น้อยกว่าหรือเท่ากับ) | <= |
การรวม Operator (Compound Range)
- MongoDB รวมเงื่อนไขใน Object เดียวกันเป็น AND อัตโนมัติ
{field: {$gt: 50, $lt: 60}}=field > 50 AND field < 60- ทำงานได้กับ Date, Number, String (Lexicographic)
Performance
- สร้าง Index บนฟิลด์ที่ Query Range บ่อย:
db.coll.createIndex({Amount: 1}) - Range Query ใช้ Index ได้ (Index Scan)
- หลีกเลี่ยง $where สำหรับ Range (ช้า ไม่ใช้ Index)