MongoDB-এ কালেকশনের প্রথম এবং শেষ ডকুমেন্ট পাওয়ার সবচেয়ে দক্ষ পদ্ধতি হলো অ্যাগ্রিগেশন পাইপলাইনে $group স্টেজের সাথে $first এবং $last অ্যাকুমুলেটর ব্যবহার করা। এটি পুরো কালেকশন স্ক্যান না করেই ফলাফল দেয় (ইন্ডেক্স ব্যবহার করে)।
নমুনা কালেকশন তৈরি
> db.demo73.insertOne({ "Name": "Chris" });
{ "acknowledged": true, "insertedId": ObjectId("5e29c41b71bf0181ecc4226c") }
> db.demo73.insertOne({ "Name": "Bob" });
{ "acknowledged": true, "insertedId": ObjectId("5e29c41e71bf0181ecc4226d") }
> db.demo73.insertOne({ "Name": "David" });
{ "acknowledged": true, "insertedId": ObjectId("5e29c42271bf0181ecc4226e") }
ডকুমেন্টগুলো দেখানো
> db.demo73.find();
আউটপুট (ইনসার্ট অর্ডার অনুযায়ী):
{ "_id": ObjectId("5e29c41b71bf0181ecc4226c"), "Name": "Chris" }
{ "_id": ObjectId("5e29c41e71bf0181ecc4226d"), "Name": "Bob" }
{ "_id": ObjectId("5e29c42271bf0181ecc4226e"), "Name": "David" }
প্রথম এবং শেষ ডকুমেন্ট পাওয়ার কোয়েরি
> db.demo73.aggregate([
{
$group: {
_id: null,
first: { $first: "$$ROOT" },
last: { $last: "$$ROOT" }
}
}
]);
ফলাফল
{
"_id": null,
"first": { "_id": ObjectId("5e29c41b71bf0181ecc4226c"), "Name": "Chris" },
"last": { "_id": ObjectId("5e29c42271bf0181ecc4226e"), "Name": "David" }
}
ব্যাখ্যা:
$$ROOT- সম্পূর্ণ ডকুমেন্টকে রিপ্রেজেন্ট করে।$first- গ্রুপের প্রথম ডকুমেন্ট (ন্যাচারাল অর্ডার/ইন্ডেক্স অনুযায়ী)।$last- গ্রুপের শেষ ডকুমেন্ট।_id: null- সব ডকুমেন্ট এক গ্রুপে।
সর্ট সহ প্রথম/শেষ (নির্দিষ্ট ফিল্ড অনুযায়ী)
যদি নির্দিষ্ট ফিল্ড অনুযায়ী প্রথম/শেষ চান, তবে $sort যোগ করুন:
db.demo73.aggregate([
{ $sort: { Name: 1 } },
{ $group: { _id: null, first: { $first: "$$ROOT" }, last: { $last: "$$ROOT" } } }
]);
বিকল্প পদ্ধতি (সিম্পল কেস)
- প্রথম:
db.demo73.find().sort({_id: 1}).limit(1) - শেষ:
db.demo73.find().sort({_id: -1}).limit(1)
এই পদ্ধতিগুলো ইন্ডেক্স ব্যবহার করে খুব দ্রুত, কিন্তু অ্যাগ্রিগেশন পদ্ধতিটি একসাথে দুটি পাওয়ার জন্য উপযোগী।