Aggregation Pipelines এর উন্নত ব্যবহার

Database Tutorials - ডকুমেন্ট ডিবি (DocumentDB) DocumentDB এর Advanced Features |
193
193

Aggregation Pipelines MongoDB এবং DocumentDB-তে ডেটা বিশ্লেষণ এবং প্রক্রিয়া করার জন্য অত্যন্ত শক্তিশালী একটি ফিচার। এটি বিভিন্ন stages এবং operators ব্যবহার করে ডেটাকে একাধিক ধাপে প্রক্রিয়া করতে সহায়তা করে, যেমন ডেটা ফিল্টারিং, গ্রুপিং, সোর্টিং, প্রজেকশন, এবং আরও অনেক কিছু। এখানে আমরা Aggregation Pipelines এর উন্নত ব্যবহারের কিছু কৌশল এবং উদাহরণ আলোচনা করব, যা আপনার ডেটা প্রসেসিংকে আরও শক্তিশালী এবং কার্যকরী করে তুলবে।


Aggregation Pipelines এর মূল স্টেজসমূহ

  • $match: ডেটা ফিল্টার করা, যেখানে নির্দিষ্ট শর্তে ডেটা বাছাই করা হয়।
  • $group: ডেটা গ্রুপ করা এবং একাধিক ডকুমেন্ট থেকে একটি অ্যাগ্রিগেটেড ফলাফল তৈরি করা।
  • $sort: ডেটা সোর্ট করা।
  • $project: ডেটার কিছু ফিল্ড মুছে ফেলা বা নতুন ফিল্ড তৈরি করা।
  • $unwind: অ্যারে ডকুমেন্টগুলি আলাদা আলাদা ডকুমেন্টে ভাগ করা।
  • $limit: কুয়েরি রেজাল্টের সংখ্যার সীমা নির্ধারণ করা।

এই স্টেজগুলি একে অপরের সাথে সংযুক্ত করে Pipeline তৈরি করা হয়, যা একাধিক স্টেপে ডেটা প্রক্রিয়া করতে সাহায্য করে।


Aggregation Pipelines এর উন্নত ব্যবহার

১. একাধিক স্টেজের সমন্বয়

একাধিক স্টেজকে একত্রে ব্যবহার করে জটিল ডেটা প্রসেসিং কার্যক্রম করা যায়। উদাহরণস্বরূপ, আপনি ডেটা ফিল্টার করার পর সেটি গ্রুপ করতে পারেন এবং তারপর সেগুলো সঠিকভাবে সাজিয়ে একটি নির্দিষ্ট লিমিট পর্যন্ত রেজাল্ট দেখতে পারেন।

উদাহরণ: নিচের কুয়েরি একটি ইকমার্স ডেটাবেসের অর্ডার ডেটা গ্রুপ করে, প্রতি গ্রাহকের জন্য মোট অর্ডারের পরিমাণ বের করে এবং সর্বোচ্চ ৫টি গ্রাহক দেখায়।

db.orders.aggregate([
  { $match: { status: "completed" } },  // শুধুমাত্র সম্পন্ন অর্ডার
  { $group: { _id: "$customerId", totalAmount: { $sum: "$amount" } } },  // গ্রুপিং করে মোট পরিমাণ হিসাব করা
  { $sort: { totalAmount: -1 } },  // মোট পরিমাণ অনুযায়ী সাজানো
  { $limit: 5 }  // শীর্ষ ৫টি গ্রাহক
])

এই উদাহরণে:

  • প্রথমে status ফিল্টার করা হচ্ছে।
  • এরপর গ্রাহকের totalAmount হিসাব করা হচ্ছে।
  • তারপর totalAmount এর ভিত্তিতে সজ্জিত করা হচ্ছে এবং শীর্ষ ৫টি গ্রাহক দেখানো হচ্ছে।

২. $lookup (Join-like Operation)

MongoDB-তে $lookup ব্যবহার করে দুটি আলাদা কালেকশনের মধ্যে join করা যায়, যা SQL ডেটাবেসের JOIN এর মতো। এটি দুটি কালেকশনের মধ্যে সম্পর্ক স্থাপন করে।

উদাহরণ: ধরা যাক, আপনার কাছে orders এবং products নামের দুটি কালেকশন আছে এবং আপনি প্রতিটি অর্ডারের সাথে সংশ্লিষ্ট পণ্যের তথ্য যুক্ত করতে চান।

db.orders.aggregate([
  {
    $lookup: {
      from: "products",  // যেখানে join করতে হবে
      localField: "productId",  // অর্ডার ডকুমেন্টের ক্ষেত্র
      foreignField: "_id",  // পণ্য ডকুমেন্টের ক্ষেত্র
      as: "productDetails"  // যেখানে ফলাফল রাখা হবে
    }
  },
  { $unwind: "$productDetails" }  // পণ্যের তথ্য এক্সপ্যান্ড করা
])

এখানে:

  • $lookup দুটি কালেকশনের মধ্যে সম্পর্ক স্থাপন করেছে, এবং অর্ডারের তথ্যের সাথে সংশ্লিষ্ট পণ্যের তথ্য যুক্ত করেছে।
  • $unwind ব্যবহার করে অ্যারে ভ্যালু এক্সপ্যান্ড করা হয়েছে।

৩. $facet (Multiple Pipelines)

$facet স্টেজ ব্যবহার করে আপনি একাধিক পিপলাইনের মাধ্যমে একসাথে একাধিক ডেটা প্রসেসিং করতে পারেন। এটি জটিল কুয়েরি তৈরি করতে সহায়ক।

উদাহরণ: ধরা যাক, আপনি চান একদিকে সকল পণ্য তথ্য এবং অন্যদিকে বিক্রির মোট পরিমাণ আলাদা আলাদা ভাবে বের করতে:

db.orders.aggregate([
  {
    $facet: {
      "totalSales": [
        { $match: { status: "completed" } },
        { $group: { _id: null, totalSales: { $sum: "$amount" } } }
      ],
      "productStats": [
        { $unwind: "$products" },
        { $group: { _id: "$products.productId", totalSold: { $sum: "$products.quantity" } } }
      ]
    }
  }
])

এখানে:

  • $facet দুটি ভিন্ন পিপলাইন তৈরি করেছে: একটি totalSales এর জন্য এবং অপরটি productStats এর জন্য।
  • দুটি ভিন্ন পিপলাইনের মাধ্যমে একসাথে বিভিন্ন ধরনের ডেটা বের করা হয়েছে।

৪. Complex Filtering এবং Sorting

কখনও কখনও আপনার প্রক্রিয়াজাত ডেটার মধ্যে আরও জটিল ফিল্টার এবং সোর্টিং প্রয়োজন হতে পারে, যা সহজে $match এবং $sort স্টেজ ব্যবহার করে করা যায়।

উদাহরণ: ধরা যাক, আপনি এমন সমস্ত অর্ডারের ডেটা চান যেখানে গ্রাহক age > 30 এবং পরিমাণ > 1000, এবং সেগুলি date এর ভিত্তিতে সজ্জিত করতে চান:

db.orders.aggregate([
  { $match: { age: { $gt: 30 }, amount: { $gt: 1000 } } },
  { $sort: { date: -1 } }
])

এটি শুধুমাত্র সেই অর্ডারগুলো দেখাবে যেখানে গ্রাহকের বয়স ৩০ এর বেশি এবং অর্ডারের পরিমাণ ১০০০ এর বেশি।


৫. $addFields এবং $set (Adding New Fields)

$addFields এবং $set অপারেশন ব্যবহার করে আপনি নতুন ফিল্ড যোগ করতে পারেন বা বিদ্যমান ফিল্ডের মান পরিবর্তন করতে পারেন।

উদাহরণ: ধরা যাক, আপনি প্রতি অর্ডারের সাথে একটি নতুন ফিল্ড taxAmount যোগ করতে চান:

db.orders.aggregate([
  { $addFields: { taxAmount: { $multiply: ["$amount", 0.1] } } }
])

এখানে:

  • $addFields অপারেশনটি প্রতিটি অর্ডারের জন্য taxAmount হিসাব করে এবং সেটি নতুন ফিল্ড হিসেবে যোগ করেছে।

সারাংশ

Aggregation Pipelines MongoDB এবং DocumentDB-তে ডেটা প্রক্রিয়া এবং বিশ্লেষণের জন্য অত্যন্ত শক্তিশালী একটি ফিচার। $match, $group, $sort, $lookup, $facet, এবং $addFields এর মতো স্টেজগুলি ব্যবহার করে আপনি জটিল ডেটা প্রসেসিং ও বিশ্লেষণ কার্যক্রম সম্পাদন করতে পারেন। এই ফিচারগুলো ব্যবহার করে আপনি আপনার ডেটা ম্যানিপুলেশন এবং বিশ্লেষণ প্রক্রিয়াকে আরও শক্তিশালী এবং কার্যকরী করতে পারেন।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion