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

ดึงเอกสารแรก (Top Most) จากคอลเลกชัน MongoDB ด้วย limit(1)

การดึงเอกสารแรกหรือ "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 จริง