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

วิธีดึงเอกสารแรกจาก Cursor ใน MongoDB ด้วย findOne()

ใช้เมธอด findOne() เพื่อดึงเอกสารแรกที่ตรงกับเงื่อนไข (หรือเอกสารแรกในคอลเลกชันถ้าไม่ระบุเงื่อนไข)

รูปแบบคำสั่ง

// เอกสารแรกในคอลเลกชัน
db.collectionName.findOne();

// เอกสารแรกที่ตรงเงื่อนไข
db.collectionName.findOne({ "fieldName": "value" });

ตัวอย่างเต็มรูปแบบ

1. สร้างข้อมูลตัวอย่าง

> db.getFirstItemDemo.insertOne({"CustomerName":"Chris","CustomerAge":28});
> db.getFirstItemDemo.insertOne({"CustomerName":"Larry","CustomerAge":26});
> db.getFirstItemDemo.insertOne({"CustomerName":"Robert","CustomerAge":29});
> db.getFirstItemDemo.insertOne({"CustomerName":"David","CustomerAge":39});

2. แสดงข้อมูลทั้งหมด

> db.getFirstItemDemo.find().pretty();
{ "_id" : ObjectId("..."), "CustomerName" : "Chris", "CustomerAge" : 28 }
{ "_id" : ObjectId("..."), "CustomerName" : "Larry", "CustomerAge" : 26 }
{ "_id" : ObjectId("..."), "CustomerName" : "Robert", "CustomerAge" : 29 }
{ "_id" : ObjectId("..."), "CustomerName" : "David", "CustomerAge" : 39 }

3. ดึงเอกสารแรก (findOne ไม่มีเงื่อนไข)

> db.getFirstItemDemo.findOne();
{ "_id" : ObjectId("..."), "CustomerName" : "Chris", "CustomerAge" : 28 }

4. ดึงเอกสารที่ตรงเงื่อนไข (CustomerAge = 39)

> db.getFirstItemDemo.findOne({ "CustomerAge": 39 });
{ "_id" : ObjectId("..."), "CustomerName" : "David", "CustomerAge" : 39 }

ความแตกต่างระหว่าง find() และ findOne()

คำสั่งคืนค่าประเภท
find()Cursorต้อง iterate เพื่อดูข้อมูล
findOne()Document (Object)คืนเอกสารเดียวทันที

สรุป

  • findOne() คืนค่าเป็น Document โดยตรง ไม่ใช่ Cursor
  • เหมาะสำหรับดึงข้อมูลเดี่ยว เช่น ดูโปรไฟล์ผู้ใช้
  • หากไม่มีเอกสารตรงเงื่อนไข จะคืน null
  • ใน MongoDB driver ใหม่ๆ ใช้ findOne() แทน find().limit(1) เพื่อประสิทธิภาพ