findOne() คืนค่าเอกสารแรกที่ตรงเงื่อนไข หากไม่พบคืนค่า null ส่วน find() คืนค่า Cursor เสมอ (ไม่คืนค่า null)
ตัวอย่างการทดสอบกับคอลเลกชันว่าง
สร้างคอลเลกชันว่าง:
> db.createCollection('emptyCollection');
{ "ok" : 1 }
นับจำนวนเอกสาร:
> db.emptyCollection.count();
ผลลัพธ์:
0
ทดสอบ findOne() กับคอลเลกชันว่าง
> if(db.emptyCollection.findOne()){print("Returns Cursor")} else {print("Not returning cursor")}
ผลลัพธ์:
Not returning cursor
ทดสอบ find() กับคอลเลกชันว่าง
> if(db.emptyCollection.find()){print("Returns Cursor")} else {print("Not returning cursor")}
ผลลัพธ์:
Returns Cursor
สรุปความแตกต่าง
| คุณสมบัติ | find() | findOne() |
|---|---|---|
| คืนค่า | Cursor | เอกสารเดียว / null |
| เมื่อไม่พบข้อมูล | Cursor ว่าง (ไม่ใช่ null) | null |
| ประสิทธิภาพ | เหมาะสำหรับหลายเอกสาร | เร็วกว่าสำหรับเอกสารเดียว |
| การใช้งาน | ต้อง iterate (toArray, forEach) | ใช้ได้ทันที |
ข้อแนะนำ: ใช้ findOne() เมื่อต้องการเอกสารเพียงใบเดียว ใช้ find() เมื่อต้องการหลายเอกสารหรือต้องการ Cursor สำหรับการประมวลผลต่อ