เมธอด findOne() คืนค่า เพียงเอกสารเดียว ที่ตรงกับเงื่อนไข แม้จะมีหลายเอกสารที่ตรงเงื่อนไขก็ตาม (ต่างจาก find() ที่คืน Cursor ทั้งหมด)
ตัวอย่างข้อมูลทดสอบ (มีชื่อซ้ำ)
> db.demo230.insertOne({"FirstName": "Chris"});
{ "acknowledged": true, "insertedId": ObjectId("5e3fc4d2f4cebbeaebec513e") }
> db.demo230.insertOne({"FirstName": "Bob"});
{ "acknowledged": true, "insertedId": ObjectId("5e3fc4d5f4cebbeaebec513f") }
> db.demo230.insertOne({"FirstName": "Chris"});
{ "acknowledged": true, "insertedId": ObjectId("5e3fc4dbf4cebbeaebec5140") }
> db.demo230.insertOne({"FirstName": "David"});
{ "acknowledged": true, "insertedId": ObjectId("5e3fc4dff4cebbeaebec5141") }
> db.demo230.insertOne({"FirstName": "David"});
{ "acknowledged": true, "insertedId": ObjectId("5e3fc4e1f4cebbeaebec5142") }
แสดงข้อมูลทั้งหมด
> db.demo230.find();
ผลลัพธ์ (มี Chris 2 ราย, David 2 ราย)
{
"_id": ObjectId("5e3fc4d2f4cebbeaebec513e"), "FirstName": "Chris"
}
{
"_id": ObjectId("5e3fc4d5f4cebbeaebec513f"), "FirstName": "Bob"
}
{
"_id": ObjectId("5e3fc4dbf4cebbeaebec5140"), "FirstName": "Chris"
}
{
"_id": ObjectId("5e3fc4dff4cebbeaebec5141"), "FirstName": "David"
}
{
"_id": ObjectId("5e3fc4e1f4cebbeaebec5142"), "FirstName": "David"
}
ใช้ findOne() ค้นหา FirstName = "David"
> db.demo230.findOne({"FirstName": "David"});
ผลลัพธ์ (คืนเพียงเอกสารแรกที่เจอ)
{
"_id": ObjectId("5e3fc4dff4cebbeaebec5141"),
"FirstName": "David"
}
จุดสำคัญ:
findOne()คืนค่า Object/Document โดยตรง (ไม่ใช่ Cursor)- หาไม่เจอจะคืน
null - เหมาะสำหรับค้นหาเอกสารเฉพาะเจาะจง (เช่น ดูรายละเอียดโดย _id)
- ประสิทธิภาพดีกว่า
find().limit(1)เพราะหยุดค้นทันทีที่เจอตัวแรก