MongoDB অগ্রেশন পাইপলাইনে অ্যারের সাইজ অনুযায়ী সর্টিং
ডকুমেন্টের অ্যারে ফিল্ডের লেন্থ (সাইজ) অনুযায়ী সর্ট করার জন্য অগ্রেশন পাইপলাইনে $unwind, $group (with $sum) এবং $sort ব্যবহার করা হয়।
উদাহরণ: ছাত্রের লিস্ট সহ ডকুমেন্ট তৈরি
> db.demo33.insertOne({"ListOfStudent":["Chris","Bob"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e17556ccfb11e5c34d898ca") }
> db.demo33.insertOne({"ListOfStudent":["David","Adam","Mike"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e17557acfb11e5c34d898cb") }
> db.demo33.insertOne({"ListOfStudent":["Carol","Sam","John","Robert"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e1755a3cfb11e5c34d898cc") }
সমস্ত ডকুমেন্ট
> db.demo33.find();
{ "_id" : ObjectId("5e17556ccfb11e5c34d898ca"), "ListOfStudent" : [ "Chris", "Bob" ] }
{ "_id" : ObjectId("5e17557acfb11e5c34d898cb"), "ListOfStudent" : [ "David", "Adam", "Mike" ] }
{ "_id" : ObjectId("5e1755a3cfb11e5c34d898cc"), "ListOfStudent" : [ "Carol", "Sam", "John", "Robert" ] }
অগ্রেশন কুয়েরি: অ্যারের লেন্থ অনুযায়ী ডিসেন্ডিং সর্ট
> db.demo33.aggregate({$unwind:"$ListOfStudent"}, { $group : {_id:'$_id', ct:{$sum:1}}}, { $sort :{ ct: -1}} );
ফলাফল
{ "_id" : ObjectId("5e1755a3cfb11e5c34d898cc"), "ct" : 4 }
{ "_id" : ObjectId("5e17557acfb11e5c34d898cb"), "ct" : 3 }
{ "_id" : ObjectId("5e17556ccfb11e5c34d898ca"), "ct" : 2 }
পাইপলাইন ব্যাখ্যা
$unwind: "$ListOfStudent": অ্যারে ডিকনস্ট্রাক্ট করে প্রতিটি এলিমেন্ট আলাদা ডকুমেন্ট বানায়।$group: {_id: '$_id', ct: {$sum: 1}}: মূল ডকুমেন্টের_idদিয়ে গ্রুপ করে এবং কাউন্ট (ct) বের করে।$sort: {ct: -1}: কাউন্ট অনুযায়ী ডিসেন্ডিং সর্ট (সর্বোচ্চ উপরে)।
আধুনিক বিকল্প (MongoDB 4.4+)
$size অপারেটর ব্যবহার করে সরাসরি:
db.demo33.aggregate([
{ $project: { ListOfStudent: 1, count: { $size: "$ListOfStudent" } } },
{ $sort: { count: -1 } }
])
এটি আরও সহজ এবং পারফরম্যান্সের দৃষ্টিতে ভালো।