অ্যারেতে থাকা সাব-ডকুমেন্ট সর্ট করা
MongoDB-এ ডকুমেন্টের ভিতরে থাকা অ্যারে এলিমেন্টগুলো সর্ট করার জন্য অগ্রেশন পাইপলাইনে $unwind, $sort এবং $group ব্যবহার করতে হয়।
উদাহরণ: ছাত্রের বিবরণ সহ ডকুমেন্ট তৈরি
> db.demo23.insertOne({ "StudentDetails" : [ { "Name" : "David", "Age" : 23 }, { "Name" : "Adam", "Age" : 24 } ] });
{ "acknowledged" : true, "insertedId" : ObjectId("5e14c3eb22d07d3b95082e71") }
সর্ট করার আগে ডেটা
> db.demo23.find().pretty()
{
"_id" : ObjectId("5e14c3eb22d07d3b95082e71"),
"StudentDetails" : [
{ "Name" : "David", "Age" : 23 },
{ "Name" : "Adam", "Age" : 24 }
]
}
অগ্রেশন পাইপলাইন কুয়েরি
> db.demo23.aggregate([
{ "$unwind" : "$StudentDetails" },
{ "$sort" : { "StudentDetails.Name" : 1 } },
{ "$match" : { } },
{ "$group" : { "StudentDetails" : { "$push" : { "Name" : "$StudentDetails.Name" } }, "_id" : null } },
{ "$project" : { "_id" : 0, "StudentDetails" : 1 } }
]);
ফলাফল (নাম অনুযায়ী অ্যাাজিবেটিক সর্টেড)
{ "StudentDetails" : [ { "Name" : "Adam" }, { "Name" : "David" } ] }
পাইপলাইন ব্যাখ্যা
$unwind: অ্যারে ডিকনস্ট্রাক্ট করে প্রতিটি এলিমেন্টকে আলাদা ডকুমেন্টে রূপান্তর করে।$sort:StudentDetails.Nameফিল্ড অনুযায়ী অর্ডার করে (১ = অ্যাসেন্ডিং)।$group: আবার একই ডকুমেন্টে অ্যারে রিকনস্ট্রাক্ট করে।$project: শুধুStudentDetailsফিল্ড আউটপুটে রাখা।
নোট: MongoDB ৫.২+ ভার্সনে $sortArray অপারেটর ব্যবহার করে সরাসরি অ্যারে সর্ট করা সম্ভব, যা আরও সহজ এবং দ্রুত।