ใช้ sort() เรียงลำดับ แล้ว limit(2) เพื่อดึงเอกสารปัจจุบันและก่อนหน้า (2 รายการล่าสุดที่ตรงเงื่อนไข) สร้างคอลเลกชันตัวอย่าง:
> db.demo360.insertOne({id:101,"Name":"Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e56a10c54a481fef8ec7a15") }
> db.demo360.insertOne({id:102,"Name":"David"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e56a11254a481fef8ec7a16") }
> db.demo360.insertOne({id:103,"Name":"Bob"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e56a11a54a481fef8ec7a17") }
> db.demo360.insertOne({id:104,"Name":"Mike"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e56a11f54a481fef8ec7a18") }
แสดงข้อมูล:
> db.demo360.find();
คิวรีหา id <= 102 เรียง _id DESC แล้ว limit 2:
> db.demo360.find({ id: { $lte: 102 } }, {id:1, Name: 1 }).sort({_id: -1}).limit(2);
ผลลัพธ์ (id 102 แล้ว 101):
{ "_id" : ObjectId("5e56a11254a481fef8ec7a16"), "id" : 102, "Name" : "David" }
{ "_id" : ObjectId("5e56a10c54a481fef8ec7a15"), "id" : 101, "Name" : "Chris" }
คำอธิบาย
{id: {$lte: 102}}: เงื่อนไข id น้อยกว่าหรือเท่ากับ 102 (current = 102){id:1, Name: 1}: projection ดึงเฉพาะ id และ Name.sort({_id: -1}): เรียง _id ใหม่ไปเก่า (DESC).limit(2): จำกัด 2 รายการ (current + previous)
การประยุกต์ใช้
รูปแบบนี้ใช้ได้กับ pagination, แสดงประวัติล่าสุด, หรือหา previous/next document ตามลำดับเวลา/ID