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

MongoDB-এ একই ক্যোয়ারিতে সর্ট এবং গ্রুপ করার পদ্ধতি

MongoDB-এ এগ্রিগেশন পাইপলাইনে $group এবং $sort স্টেজ ব্যবহার করে একই ক্যোয়ারিতে গ্রুপিং এবং সর্টিং করা যায়।

উদাহরণ

প্রোডাক্ট এবং প্রাইস সহ ডকুমেন্ট তৈরি করুন:

> db.sortAndGroupDemo.insertOne({ Price: 40, Product: 10 });
{ "acknowledged" : true, "insertedId" : ObjectId("5ce8f2bc78f00858fb12e907") }

> db.sortAndGroupDemo.insertOne({ Price: 100, Product: 10 });
{ "acknowledged" : true, "insertedId" : ObjectId("5ce8f2bc78f00858fb12e908") }

> db.sortAndGroupDemo.insertOne({ Price: 90, Product: 20 });
{ "acknowledged" : true, "insertedId" : ObjectId("5ce8f2bc78f00858fb12e909") }

> db.sortAndGroupDemo.insertOne({ Price: 200, Product: 10 });
{ "acknowledged" : true, "insertedId" : ObjectId("5ce8f2bc78f00858fb12e90a") }

> db.sortAndGroupDemo.insertOne({ Price: 70, Product: 20 });
{ "acknowledged" : true, "insertedId" : ObjectId("5ce8f2bc78f00858fb12e90b") }

> db.sortAndGroupDemo.insertOne({ Price: 70, Product: 30 });
{ "acknowledged" : true, "insertedId" : ObjectId("5ce8f2bd78f00858fb12e90c") }

সকল ডকুমেন্ট দেখুন:

> db.sortAndGroupDemo.find().pretty();

আউটপুট:

{ "_id" : ObjectId("5ce8f2bc78f00858fb12e907"), "Price" : 40, "Product" : 10 }
{ "_id" : ObjectId("5ce8f2bc78f00858fb12e908"), "Price" : 100, "Product" : 10 }
{ "_id" : ObjectId("5ce8f2bc78f00858fb12e909"), "Price" : 90, "Product" : 20 }
{ "_id" : ObjectId("5ce8f2bc78f00858fb12e90a"), "Price" : 200, "Product" : 10 }
{ "_id" : ObjectId("5ce8f2bc78f00858fb12e90b"), "Price" : 70, "Product" : 20 }
{ "_id" : ObjectId("5ce8f2bd78f00858fb12e90c"), "Price" : 70, "Product" : 30 }

Product ভিত্তিক গ্রুপ করে Price অনুযায়ী সর্ট করা

> db.sortAndGroupDemo.aggregate([
    { "$group": { "_id": "$Product" } },
    { "$sort": { "Price": 1 } },
    { "$project": { "_id": 1 } }
]);

আউটপুট:

{ "_id" : 30 }
{ "_id" : 20 }
{ "_id" : 10 }

গুরুত্বপূর্ণ সমস্যা: উপরের ক্যোয়ারিতে $sort ঠিকমতো কাজ করে না, কারণ $group এর পর Price ফিল্ড আর থাকে না (শুধু _id থাকে)। MongoDB এরর না দিয়ে সর্ট নয় করে।

সঠিক পদ্ধতি: গ্রুপের মধ্যে সর্ট বা অ্যাগ্রিগেটড ফিল্ডে সর্ট

পদ্ধতি ১: গ্রুপের মধ্যে মিন/ম্যাক্স প্রাইস রাখে সর্ট

db.sortAndGroupDemo.aggregate([
    { $group: { _id: "$Product", minPrice: { $min: "$Price" } } },
    { $sort: { minPrice: 1 } },
    { $project: { _id: 1 } }
]);

আউটপুট:

{ "_id" : 30, "minPrice" : 70 }
{ "_id" : 20, "minPrice" : 70 }
{ "_id" : 10, "minPrice" : 40 }

পদ্ধতি ২: সব প্রাইস অ্যারে আকারে রাখে সর্ট

db.sortAndGroupDemo.aggregate([
    { $group: { _id: "$Product", prices: { $push: "$Price" } } },
    { $sort: { "prices.0": 1 } },  // প্রথম এলিমেন্টে সর্ট (সেট করলে)
    { $project: { _id: 1 } }
]);

সুপারিশ: গ্রুপ করার সময় সর্টিংয়ের জন্য প্রয়োজনীয় ফিল্ড (min, max, avg) কম্পিউট করে রাখুন, তারপর সর্ট করুন।

  1. MongoDB-তে ডুপ্লিকেট ডকুমেন্ট গ্রুপ করা

  2. MongoDB-এ নেস্টেড অ্যারে সর্ট করা

  3. MongoDB-এ _id দিয়ে গ্রুপ করে ডকুমেন্ট কাউন্ট করা

  4. MongoDB এগ্রিগেশন ও প্রজেকশন: $project স্টেজ ব্যবহার