จำกัดจำนวนเอกสารที่คืนกลับด้วยเมธอด limit()
เมธอด limit() ใช้สำหรับจำกัดจำนวนเอกสารสูงสุดที่ cursor จะคืนกลับมา เหมาะสำหรับการแบ่งหน้า (pagination) หรือดึงตัวอย่างข้อมูล
ตัวอย่างข้อมูลทดสอบ
> db.demo58.insertOne({ "Name": "David" });
> db.demo58.insertOne({ "Name": "David" });
> db.demo58.insertOne({ "Name": "David" });
> db.demo58.insertOne({ "Name": "Mike" });
แสดงข้อมูลทั้งหมด
> db.demo58.find();
ผลลัพธ์:
{ "_id": ObjectId("..."), "Name": "David" }
{ "_id": ObjectId("..."), "Name": "David" }
{ "_id": ObjectId("..."), "Name": "David" }
{ "_id": ObjectId("..."), "Name": "Mike" }
คำสั่งใช้ limit() ร่วมกับตัวแปร
> v = 2;
> d = db.demo58.find({ "Name": "David" }).limit(v + 1);
ผลลัพธ์: คืนเอกสาร David 3 รายการ (v+1 = 3)
ตรวจสอบว่ามีข้อมูลมากกว่าที่ limit หรือไม่
> m = d.size() > v;
ผลลัพธ์: true (เพราะมี 3 รายการ > 2)
คำอธิบายเทคนิคนี้
โค้ดตัวอย่างใช้เทคนิค limit(v+1) เพื่อตรวจสอบว่ามีข้อมูลมากกว่าที่จะแสดงต่อหน้าหรือไม่ (hasMore) ซึ่งเป็นรูปแบบที่พบบ่อยในการ implement pagination:
- ขอข้อมูลมากกว่าที่จะแสดง 1 รายการ
- ถ้าจำนวนที่ได้ > limit แสดงว่ามีหน้าถัดไป
- แสดงเฉพาะ limit รายการแรกให้ผู้ใช้
รูปแบบมาตรฐานสำหรับ Pagination
> db.collection.find(query).sort({ _id: 1 }).skip(page * limit).limit(limit);
ควรใช้ sort() เสมอเพื่อให้ลำดับคงที่