ใช้ $gt และ $lt ร่วมกันเพื่อกรองค่าในช่วงที่ต้องการ
เมื่อต้องการดึงเอกสารที่มีค่าอยู่ในช่วงเฉพาะ (Range Query) ให้ใช้ $gt (มากกว่า) และ $lt (น้อยกว่า) ร่วมกันในเงื่อนไขเดียวกัน
ตัวอย่างข้อมูลทดสอบ
> db.demo59.insertOne({ "Values": 50 });
> db.demo59.insertOne({ "Values": 10 });
> db.demo59.insertOne({ "Values": 58 });
> db.demo59.insertOne({ "Values": 78 });
แสดงข้อมูลทั้งหมด
> db.demo59.find();
ผลลัพธ์:
{ "_id": ObjectId("..."), "Values": 50 }
{ "_id": ObjectId("..."), "Values": 10 }
{ "_id": ObjectId("..."), "Values": 58 }
{ "_id": ObjectId("..."), "Values": 78 }
คำสั่งดึงเอกสารที่ Values อยู่ระหว่าง 51 ถึง 70
> db.demo59.find({ Values: { $gt: 51, $lt: 70 } });
ผลลัพธ์ที่ได้
{ "_id": ObjectId("..."), "Values": 58 }
คำอธิบาย
- $gt: 51: ค่าต้องมากกว่า 51 (ไม่รวม 51)
- $lt: 70: ค่าต้องน้อยกว่า 70 (ไม่รวม 70)
- ทั้งสองเงื่อนไขต้องเป็นจริงพร้อมกัน (AND logic)
ตัวเลือกอื่นสำหรับช่วงที่รวมขอบเขต
- $gte: 50, $lte: 70: รวม 50 และ 70 ด้วย
- { Values: { $in: [50, 58, 70] } }: ถ้าต้องการค่าเฉพาะบางค่า
ประสิทธิภาพ
ควรสร้างดัชนีบนฟิลด์ Values เพื่อให้ Range Query ทำงานได้เร็ว:
> db.demo59.createIndex({ Values: 1 });