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

วิธีเผยแพร่ระเบียนล่าสุด N เรกคอร์ดพร้อมเรียงลำดับใน MongoDB


ใช้ sort() และ limit() สำหรับ Pagination แบบ Real-time

เพื่อดึงข้อมูลล่าสุด N รายการ ให้เรียงลำดับตามฟิลด์ที่บ่งบอกลำดับเวลา (เช่น _id, createdAt) แล้วจำกัดจำนวนด้วย limit()

ตัวอย่างข้อมูล

> db.demo454.insertOne({ "ClientName": "Chris" });
> db.demo454.insertOne({ "ClientName": "John" });
> db.demo454.insertOne({ "ClientName": "Bob" });
> db.demo454.insertOne({ "ClientName": "David" });
> db.demo454.insertOne({ "ClientName": "Mike" });

Query ดึง 3 รายการล่าสุด เรียงตาม ClientName DESC

> db.demo454.find().sort({ ClientName: -1 }).limit(3);

ผลลัพธ์

{ "_id": ObjectId(...), "ClientName": "Mike" }
{ "_id": ObjectId(...), "ClientName": "John" }
{ "_id": ObjectId(...), "ClientName": "David" }

แนวทางปฏิบัติที่ดีสำหรับ Production

  • ใช้ _id หรือ createdAt - _id มี timestamp ติดมาแล้ว เรียง -1 ได้ล่าสุด
  • สร้าง Index - db.demo454.createIndex({ ClientName: -1 }) หรือ { _id: -1 }
  • หลีกเลี่ยง skip() สำหรับหน้าลึก - ใช้ range-based pagination (cursor-based) แทน

Cursor-based Pagination (แนะนำ)

// หน้าแรก
db.demo454.find().sort({ _id: -1 }).limit(10);

// หน้าถัดไป (ใช้ _id ของรายการสุดท้ายจากหน้าก่อน)
db.demo454.find({ _id: { $lt: lastSeenId } }).sort({ _id: -1 }).limit(10);

สำหรับ Real-time / Continuous Publishing

  • ใช้ Tailable Cursor บน Capped Collection
  • หรือ Change Streams (MongoDB 3.6+) สำหรับ real-time notifications
  • หรือ Polling ด้วย timestamp/_id เป็น cursor