การดึงเอกสารแรกหรือ "Top Most" ใช้ find() ร่วม limit(1)
> db.demo681.insertOne({_id: 101, Name: "Chris"});
{ "acknowledged" : true, "insertedId" : 101 }
> db.demo681.insertOne({_id: 102, Name: "Bob"});
{ "acknowledged" : true, "insertedId" : 102 }
> db.demo681.insertOne({_id: 103, Name: "David"});
{ "acknowledged" : true, "insertedId" : 103 }
> db.demo681.insertOne({_id: 104, Name: "Bob"});
{ "acknowledged" : true, "insertedId" : 104 }
> db.demo681.insertOne({_id: 105, Name: "Sam"});
{ "acknowledged" : true, "insertedId" : 105 }
แสดงข้อมูล:
> db.demo681.find();
คิวรีดึงเอกสารแรก
> db.demo681.find().limit(1);ผลลัพธ์ (เอกสารแรกตาม _id เรียงน้อยไปมาก):
การควบคุม "เอกสารแรก" ให้หมายถึงอะไร
MongoDB ไม่มีแนวคิด "ลำดับ insertion" โดย default ต้องระบุ
sort():// เอกสารที่ _id น้อยสุด (insert ก่อนสุด) db.collection.find().sort({_id: 1}).limit(1); // เอกสารที่ _id มากสุด (insert ล่าสุด) db.collection.find().sort({_id: -1}).limit(1); // เอกสารที่อัปเดตล่าสุด (ถ้ามี updatedAt) db.collection.find().sort({updatedAt: -1}).limit(1); // Top score db.collection.find().sort({score: -1}).limit(1);findOne() vs find().limit(1)
findOne()=find().limit(1)แต่คืนค่า Document ตรงๆ (ไม่ใช่ Cursor)- ใช้ findOne() สำหรับ lookup เดียว, find().limit(1) สำหรับ cursor chain
Capped Collection
หากต้องการ insertion order แบบ natural ใช้ Capped Collection:
db.createCollection("logs", {capped: true, size: 1000000});
แล้ว find().sort({$natural: 1}) จะได้ insertion order จริง