কম্পিউটার টিউটোরিয়াল

MongoDB-এ সাব-অ্যারে ডকুমেন্ট সর্ট করার জন্য $sort ব্যবহার

অ্যারেতে থাকা সাব-ডকুমেন্ট সর্ট করা

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" } ] }

পাইপলাইন ব্যাখ্যা

  1. $unwind: অ্যারে ডিকনস্ট্রাক্ট করে প্রতিটি এলিমেন্টকে আলাদা ডকুমেন্টে রূপান্তর করে।
  2. $sort: StudentDetails.Name ফিল্ড অনুযায়ী অর্ডার করে (১ = অ্যাসেন্ডিং)।
  3. $group: আবার একই ডকুমেন্টে অ্যারে রিকনস্ট্রাক্ট করে।
  4. $project: শুধু StudentDetails ফিল্ড আউটপুটে রাখা।

নোট: MongoDB ৫.২+ ভার্সনে $sortArray অপারেটর ব্যবহার করে সরাসরি অ্যারে সর্ট করা সম্ভব, যা আরও সহজ এবং দ্রুত।

  1. MongoDB-তে সাব-ডকুমেন্ট দিয়ে সাব-ডকুমেন্ট ফিল্টার করা (aggregate + $unwind)

  2. MongoDB-এ এমবেডেড ডকুমেন্টের অ্যারে ফিল্টার করা (৩ লেভেল)

  3. MongoDB-এ অ্যারেতে ডুপ্লিকেট চেক করা

  4. MongoDB-এ অবজেক্টের অ্যারে থেকে নেস্টেড ডকুমেন্ট কোয়েরি করা ($elemMatch)