Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

MongoDB Query: ค้นหาค่าในช่วง (Range) ไม่รวมขอบเขต (Exclusive) และรวมขอบเขต (Inclusive)

ใช้ 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 เทียบเท่า
$gtGreater Than (มากกว่า)>
$gteGreater Than or Equal (มากกว่าหรือเท่ากับ)>=
$ltLess Than (น้อยกว่า)<
$lteLess 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)