MongoDB-এ শর্ত পূরণকারী প্রথম ডকুমেন্ট মাত্র ফেচ করতে findOne() মেথড ব্যবহার করা হয়। এটি find()-এর মতো কার্সর রিটার্ন করে না, বরং সরাসরি ডকুমেন্ট (অথবা null) রিটার্ন করে।
কলেকশন এবং ডকুমেন্ট তৈরি
> db.demo116.insertOne({"EmployeeId":101,"EmployeeName":"John"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2eff98d8f64a552dae635b") }
> db.demo116.insertOne({"EmployeeId":102,"EmployeeName":"Bob"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2eff9fd8f64a552dae635c") }
> db.demo116.insertOne({"EmployeeId":103,"EmployeeName":"David"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2effa5d8f64a552dae635d") }
> db.demo116.insertOne({"EmployeeId":102,"EmployeeName":"Mike"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2effb7d8f64a552dae635e") }
সব ডকুমেন্ট দেখানো
> db.demo116.find();
আউটপুট (EmployeeId 102 দুবার আছে):
{ "_id" : ObjectId("5e2eff98d8f64a552dae635b"), "EmployeeId" : 101, "EmployeeName" : "John" }
{ "_id" : ObjectId("5e2eff9fd8f64a552dae635c"), "EmployeeId" : 102, "EmployeeName" : "Bob" }
{ "_id" : ObjectId("5e2effa5d8f64a552dae635d"), "EmployeeId" : 103, "EmployeeName" : "David" }
{ "_id" : ObjectId("5e2effb7d8f64a552dae635e"), "EmployeeId" : 102, "EmployeeName" : "Mike" }
findOne() ব্যবহার করে কোয়ারী
> db.demo116.findOne({"EmployeeId":102});
ফলাফল
{ "_id" : ObjectId("5e2eff9fd8f64a552dae635c"), "EmployeeId" : 102, "EmployeeName" : "Bob" }
ব্যাখ্যা: EmployeeId 102 वाले দুটি ডকুমেন্ট আছে, কিন্তু findOne() শুধু প্রথমটি (ন্যাচারেল অর্ডারে, সাধারণত ইনসারশন অর্ডার) রিটার্ন করেছে - Bob। Mike রিটার্ন হয়নি।
find() vs findOne():
| ফিচার | find() | findOne() |
|---|---|---|
| রিটার্ন টাইপ | Cursor (ইটেরেটর) | Document বা null |
| ফলাফল সংখ্যা | সকল মিলে যাওয়া | প্রথম মিলে যাওয়া (১টি) |
| পারফরম্যান্স | লার্জ রেজাল্টে ধীর | দ্রুত (১টি পাওয়ায় রুকবে) |
| সোর্টিং | .sort() দিয়ে কন্ট্রোল | ইনডেক্স/ন্যাচারেল অর্ডার |
স্পেসিফিক ডকুমেন্ট পেতে (সোর্ট সহ):
db.demo116.findOne({EmployeeId: 102}).sort({_id: -1}) // শেষ ইনসার্টেড (Mike)
দ্রষ্টব্য: findOne()-এ sort() চেইন করা যায় না সরাসরি। সেটার জন্য find().sort().limit(1) ব্যবহার করুন।
ব্যবহার ক্ষেত্র: ইউনিক আইডি দিয়ে লুকআপ, কনফিগারেশন ডকুমেন্ট, সেশন টোকেন ভেরিফিকেশন ইত্যাদি।