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

MongoDB: หาเอกสารปัจจุบันและก่อนหน้าด้วย Sort และ Limit

ใช้ 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