Advanced Aggregation Techniques গাইড ও নোট

Database Tutorials - মঙ্গোডিবি (MongoDB) - Advanced MongoDB Topics
294

MongoDB এর Aggregation Framework একটি শক্তিশালী টুল যা ডেটা বিশ্লেষণ এবং রূপান্তর করার জন্য ব্যবহৃত হয়। এটি বড় ডেটাসেটগুলোকে বিভিন্ন স্টেজে প্রক্রিয়া করে অর্থপূর্ণ ফলাফল তৈরি করতে সক্ষম। যখন সাধারণ aggregation অপারেশনগুলো অনেক কাজের জন্য যথেষ্ট হয়, তখন Advanced Aggregation Techniques আরো জটিল কাজ করতে সহায়তা করে, যেমন মাল্টি-স্টেজ ট্রান্সফর্মেশন, গ্রুপিং, গাণিতিক অপারেশন, এবং অ্যারে সংক্রান্ত কাজ। এর মাধ্যমে MongoDB ব্যবহারকারীরা ডেটাবেসের ভিতরে বিশ্লেষণ করতে সক্ষম হন, যা বাইরে করে আনতে অনেক সময় এবং সম্পদ বাঁচায়।

নিচে MongoDB তে Advanced Aggregation Techniques সম্পর্কে বিস্তারিত আলোচনা করা হলো।


1. Aggregation Pipeline Stages

MongoDB তে aggregation pipeline বেশ কিছু স্টেজ দিয়ে গঠিত, যা ডেটাকে রূপান্তর করতে এবং ফিল্টার করতে ব্যবহৃত হয়। এসব স্টেজের মধ্যে কিছু advanced স্টেজ রয়েছে, যেগুলো জটিল ডেটা বিশ্লেষণে ব্যবহৃত হয়।

1.1. $group Stage

$group স্টেজ ডকুমেন্টগুলোকে নির্দিষ্ট এক বা একাধিক ক্ষেত্রের ওপর গ্রুপ করে এবং প্রতিটি গ্রুপের উপর aggregation অপারেশন (যেমন: সুম, গড়, মিন, ম্যাক্স) সম্পাদন করে।

  • উদাহরণ: প্রতিটি প্রোডাক্টের জন্য মোট বিক্রয় হিসাব করা।
db.sales.aggregate([
  {
    $group: {
      _id: "$productId",   // productId এর ভিত্তিতে গ্রুপ করা
      totalSales: { $sum: "$amount" },  // বিক্রয়ের পরিমাণ যোগ করা
      avgSales: { $avg: "$amount" }    // গড় বিক্রয় পরিমাণ
    }
  }
]);

Common Operations in $group:

  • $sum: গ্রুপের মান যোগ করা।
  • $avg: গ্রুপের মানের গড় নির্ণয় করা।
  • $min: গ্রুপের সর্বনিম্ন মান নির্ধারণ করা।
  • $max: গ্রুপের সর্বোচ্চ মান নির্ধারণ করা।
  • $first: গ্রুপের প্রথম মান।
  • $last: গ্রুপের শেষ মান।

1.2. $match Stage

$match স্টেজ ডেটাবেস থেকে কুয়েরি অপারেশন প্রয়োগ করে ডকুমেন্টগুলো ফিল্টার করে। এটি $group বা অন্যান্য স্টেজের আগে ব্যবহার করলে কার্যকরী হয়, কারণ এটি আগের স্টেজে কম ডেটা প্রক্রিয়া করতে সাহায্য করে।

  • উদাহরণ: সেলস ডেটা যেখানে বিক্রয়ের পরিমাণ ১০০ এর বেশি।
db.sales.aggregate([
  {
    $match: { amount: { $gt: 100 } }   // ১০০ এর বেশি পরিমাণ বিক্রয়
  },
  {
    $group: {
      _id: "$productId",
      totalSales: { $sum: "$amount" }
    }
  }
]);

1.3. $lookup Stage (Join-like operation)

MongoDB তে $lookup স্টেজ অন্য একটি কালেকশনের সাথে join এর মতো কাজ করতে ব্যবহৃত হয়। এটি দুটি কালেকশনের মধ্যে সম্পর্ক স্থাপন করে।

  • উদাহরণ: orders এবং products কালেকশনগুলোর মধ্যে যোগদান করা।
db.orders.aggregate([
  {
    $lookup: {
      from: "products",             // যোগদান করার জন্য কালেকশন
      localField: "productId",      // orders কালেকশনের ক্ষেত্র
      foreignField: "_id",          // products কালেকশনের ক্ষেত্র
      as: "productDetails"          // ফলস্বরূপ ফিল্ড
    }
  }
]);

1.4. $unwind Stage

$unwind স্টেজ একটি অ্যারে ফিল্ডকে ডকুমেন্টে পৃথক পৃথক এলিমেন্টে বিভক্ত করে। এটি অ্যারে সংক্রান্ত কাজের জন্য উপকারী।

  • উদাহরণ: একটি প্রোডাক্টের রিভিউগুলো পৃথক ডকুমেন্টে বিভক্ত করা।
db.products.aggregate([
  {
    $unwind: "$reviews"   // reviews অ্যারে থেকে প্রতিটি এলিমেন্ট আলাদা ডকুমেন্টে করা
  }
]);

1.5. $sort Stage

$sort স্টেজ ডকুমেন্টগুলো নির্দিষ্ট ক্ষেত্রের উপর সাজিয়ে দেয়। এটি যখন সঠিকভাবে ব্যবহার করা হয় তখন পারফরম্যান্স অনেক উন্নত হয়।

  • উদাহরণ: প্রোডাক্টগুলোর দাম অনুসারে সাজানো।
db.products.aggregate([
  {
    $sort: { price: -1 }  // দাম অনুযায়ী নাম্বার দিয়ে সাজানো (বর্গানুক্রমিক)
  }
]);

1.6. $project Stage

$project স্টেজ ডকুমেন্টগুলোকে পুনরায় গঠন করতে ব্যবহৃত হয়। এর মাধ্যমে আপনি নতুন ফিল্ড যোগ করতে পারেন, ফিল্ড রিনেম করতে পারেন, অথবা কিছু ফিল্ড বাদ দিতে পারেন।

  • উদাহরণ: প্রোডাক্টের নাম এবং দাম নিয়ে একটি নতুন আউটপুট তৈরি করা।
db.products.aggregate([
  {
    $project: {
      name: 1,
      price: 1,
      discount: { $multiply: ["$price", 0.1] }  // ১০% ডিসকাউন্ট
    }
  }
]);

1.7. $facet Stage

$facet স্টেজ একাধিক aggregation pipeline চালাতে সক্ষম। একাধিক রেসাল্ট একই ডেটাতে পাওয়া যায়।

  • উদাহরণ: একটি প্রোডাক্টের মোট সংখ্যা এবং গড় দাম একসাথে পাওয়া।
db.products.aggregate([
  {
    $facet: {
      totalCount: [{ $count: "total" }],  // মোট ডকুমেন্ট সংখ্যা
      averagePrice: [{ $group: { _id: null, avgPrice: { $avg: "$price" } } }]  // গড় দাম
    }
  }
]);

1.8. $addFields / $set Stage

$addFields বা $set স্টেজের মাধ্যমে ডকুমেন্টে নতুন ফিল্ড যোগ করা বা বিদ্যমান ফিল্ড পরিবর্তন করা যায়।

  • উদাহরণ: প্রোডাক্টের দাম সহ একটি নতুন ফিল্ড যোগ করা।
db.products.aggregate([
  {
    $addFields: {
      tax: { $multiply: ["$price", 0.15] }  // ১৫% ট্যাক্স
    }
  }
]);

1.9. $bucket / $bucketAuto Stage

$bucket এবং $bucketAuto স্টেজ ডকুমেন্টগুলোকে বাল্কে (bucket) গ্রুপ করে, যেখানে $bucket কাস্টম রেঞ্জের উপর ভিত্তি করে এবং $bucketAuto নিজে থেকেই রেঞ্জ ভাগ করে দেয়।

  • উদাহরণ: প্রোডাক্টের দাম অনুসারে গ্রুপিং করা।
db.products.aggregate([
  {
    $bucket: {
      groupBy: "$price",  // দাম অনুসারে গ্রুপ করা
      boundaries: [0, 50, 100, 150, 200],  // কাস্টম রেঞ্জ
      default: "Other",   // রেঞ্জের বাইরে থাকলে "Other"
      output: {
        count: { $sum: 1 },
        total: { $sum: "$price" }
      }
    }
  }
]);

2. Advanced Aggregation Techniques for Performance Optimization

  • Indexing for Faster Aggregations: ইনডেক্স ব্যবহার করুন যাতে $match, $group, এবং $sort অপারেশনগুলি দ্রুত সম্পন্ন হয়।
  • Using $match early in the pipeline: $match স্টেজ পিপলাইনের শুরুতে ব্যবহার করলে পরবর্তী স্টেজগুলোতে কম ডেটা থাকবে, যা পারফরম্যান্স উন্নত করে।
  • Limit the output: $limit ব্যবহার করে ফলাফল সীমিত করুন, বিশেষত বড় ডেটাসেটের ক্ষেত্রে।
  • Sharding with Aggregation: শার্ডিং ক্লাস্টার ব্যবহার করলে শার্ড কী অনুসারে কুয়েরি করা এবং পারফরম্যান্স উন্নত করা সম্ভব।

সারাংশ

MongoDB তে Advanced Aggregation Techniques এর মাধ্যমে জটিল ডেটা বিশ্লেষণ এবং রূপান্তর সহজভাবে করা যায়। স্টেজগুলো যেমন $group, $match, $lookup, $unwind, এবং $project ব্যবহার করে আপনি ডেটা এগ্রিগেট করতে এবং ম্যানিপুলেট করতে পারেন। পারফরম্যান্স অপটিমাইজেশনের জন্য ইনডেক্সিং, শার্ডিং এবং অন্যান্য টেকনিক ব্যবহার করলে MongoDB এর aggregation পিপলাইন আরও কার্যকরী এবং দ্রুত হবে।

Content added By
Promotion

Are you sure to start over?

Loading...