MongoDB-এ নেস্টেড বা ইনার অ্যারে সর্ট করার জন্য অ্যাগ্রিগেশন পাইপলাইন ব্যবহার করা হয়। $unwind দিয়ে অ্যারে ফ্ল্যাটেন করা, $sort দিয়ে সর্ট করা, এবং আবার $group দিয়ে অ্যারে পুনর্গঠন করা প্রক্রিয়া অনুসরণ করতে হয়।
নমুনা কালেকশন তৈরি
> db.sortInnerArrayDemo.insertOne({
"EmployeeDetails": {
"EmployeeAddress": {
"EmployeeCountry": [
{ "EmployeeZipCode": 1003, "EmployeeStreetName": "7885 Trusel Street" },
{ "EmployeeZipCode": 1001, "EmployeeStreetName": "7390 Gonzales Drive" },
{ "EmployeeZipCode": 1002, "EmployeeStreetName": "444 N.Myres Rd." }
]
}
}
});
{ "acknowledged": true, "insertedId": ObjectId("5c6f07d3da34711ecf87a5b8") }
ডকুমেন্ট প্রদর্শন
> db.sortInnerArrayDemo.find().pretty();
আউটপুট (সর্ট করার আগে):
{
"_id": ObjectId("5c6f07d3da34711ecf87a5b8"),
"EmployeeDetails": {
"EmployeeAddress": {
"EmployeeCountry": [
{ "EmployeeZipCode": 1003, "EmployeeStreetName": "7885 Trusel Street" },
{ "EmployeeZipCode": 1001, "EmployeeStreetName": "7390 Gonzales Drive" },
{ "EmployeeZipCode": 1002, "EmployeeStreetName": "444 N.Myres Rd." }
]
}
}
}
কেস ১: অ্যাসেন্ডিং অর্ডারে সর্ট
> db.sortInnerArrayDemo.aggregate([
{ $unwind: '$EmployeeDetails.EmployeeAddress.EmployeeCountry' },
{ $sort: { 'EmployeeDetails.EmployeeAddress.EmployeeCountry.EmployeeZipCode': 1 } },
{ $group: {
_id: '$_id',
'EmpCountry': { $push: '$EmployeeDetails.EmployeeAddress.EmployeeCountry' }
}
},
{ $project: { 'EmployeeDetails.EmployeeAddress.EmployeeCountry': '$EmpCountry' } }
]).pretty();
ফলাফল (অ্যাসেন্ডিং)
{
"_id": ObjectId("5c6f07d3da34711ecf87a5b8"),
"EmployeeDetails": {
"EmployeeAddress": {
"EmployeeCountry": [
{ "EmployeeZipCode": 1001, "EmployeeStreetName": "7390 Gonzales Drive" },
{ "EmployeeZipCode": 1002, "EmployeeStreetName": "444 N.Myres Rd." },
{ "EmployeeZipCode": 1003, "EmployeeStreetName": "7885 Trusel Street" }
]
}
}
}
কেস ২: ডিসেন্ডিং অর্ডারে সর্ট
> db.sortInnerArrayDemo.aggregate([
{ $unwind: '$EmployeeDetails.EmployeeAddress.EmployeeCountry' },
{ $sort: { 'EmployeeDetails.EmployeeAddress.EmployeeCountry.EmployeeZipCode': -1 } },
{ $group: {
_id: '$_id',
'EmpCountry': { $push: '$EmployeeDetails.EmployeeAddress.EmployeeCountry' }
}
},
{ $project: { 'EmployeeDetails.EmployeeAddress.EmployeeCountry': '$EmpCountry' } }
]).pretty();
ফলাফল (ডিসেন্ডিং)
{
"_id": ObjectId("5c6f07d3da34711ecf87a5b8"),
"EmployeeDetails": {
"EmployeeAddress": {
"EmployeeCountry": [
{ "EmployeeZipCode": 1003, "EmployeeStreetName": "7885 Trusel Street" },
{ "EmployeeZipCode": 1002, "EmployeeStreetName": "444 N.Myres Rd." },
{ "EmployeeZipCode": 1001, "EmployeeStreetName": "7390 Gonzales Drive" }
]
}
}
}
ব্যাখ্যা: $unwind ইনার অ্যারের প্রতিটি এলিমেন্টকে আলাদা ডকুমেন্টে রূপান্তর করে। $sort সেটি সর্ট করে। $group আবার মূল _id দিয়ে গ্রুপ করে $push দিয়ে অ্যারে পুনরায় তৈরি করে। $project আউটপুট ফরম্যাট ঠিক করে।