Aggregation কী এবং কিভাবে কাজ করে?

MongoDB Aggregation Framework - মঙ্গোডিবি (MongoDB) - Database Tutorials

524

Aggregation হলো MongoDB এর একটি শক্তিশালী ফিচার, যা ডেটা বিশ্লেষণ, প্রক্রিয়াকরণ এবং সারাংশ তৈরি করার জন্য ব্যবহৃত হয়। MongoDB তে aggregation ডেটাকে এক বা একাধিক স্টেপে প্রক্রিয়াকরণ করে একটি কাঙ্খিত আউটপুট প্রদান করে। এটি ডেটার উপর বিভিন্ন ধরণের অপারেশন যেমন গ্রুপিং, ফিল্টারিং, সোর্টিং, এবং অ্যাগ্রিগেশন ক্যালকুলেশন (যেমন গননা, গড়, সর্বোচ্চ/নূন্যতম মান নির্ধারণ) করার জন্য ব্যবহৃত হয়।

MongoDB তে aggregation সাধারণত aggregation pipeline ব্যবহার করে করা হয়, যা একটি স্টেপ-by-স্টেপ প্রসেস। এই পিপলাইনটি একটি সিকোয়েন্সের মাধ্যমে একাধিক স্টেজে ডেটা প্রক্রিয়া করে এবং প্রতিটি স্টেজ পরবর্তী স্টেজে ডেটা পাঠায়।


Aggregation Pipeline

MongoDB তে aggregation পিপলাইন একটি তালিকা হিসেবে কাজ করে, যেখানে প্রতিটি তালিকা একটি stage (স্টেজ) এর মাধ্যমে ডেটাকে প্রক্রিয়াকরণ করে। প্রতিটি স্টেজ ডেটাতে একটি নির্দিষ্ট কাজ করে এবং তার পরবর্তী স্টেজে ডেটা প্রেরণ করে।

Aggregation Pipeline এর স্টেজসমূহ:

  1. $match:
    এই স্টেজটি MongoDB ডেটাবেস থেকে নির্দিষ্ট শর্ত অনুযায়ী ডেটা ফিল্টার করে। এটি সাধারণত SQL এর WHERE ক্লজের মতো কাজ করে।
    • উদাহরণ:

      db.collectionName.aggregate([
        { $match: { age: { $gt: 30 } } }
      ])
      

      এই কুয়েরি ডেটাবেস থেকে সেই সব ডকুমেন্ট বের করবে যেখানে বয়স ৩০ এর বেশি।

  2. $group:
    এই স্টেজটি ডেটাকে একটি নির্দিষ্ট কিপর্যায়ে গ্রুপ করে। আপনি এতে অ্যাগ্রিগেশন ক্যালকুলেশন (যেমন গড়, গননা, সর্বোচ্চ/নূন্যতম মান) করতে পারেন।
    • উদাহরণ:

      db.collectionName.aggregate([
        { $group: { _id: "$age", total: { $sum: 1 } } }
      ])
      

      এখানে ডেটাকে বয়সের ভিত্তিতে গ্রুপ করা হয়েছে এবং প্রতিটি বয়সের জন্য ডকুমেন্টের সংখ্যা গোনা হচ্ছে।

  3. $sort:
    এই স্টেজটি ডেটা সজ্জিত করার জন্য ব্যবহৃত হয় (ascending/descending)। এটি SQL এর ORDER BY ক্লজের মতো কাজ করে।
    • উদাহরণ:

      db.collectionName.aggregate([
        { $sort: { age: 1 } }
      ])
      

      এখানে ডেটাকে বয়স অনুসারে ascending অর্ডারে সাজানো হচ্ছে।

  4. $project:
    এই স্টেজটি ডেটার ফিল্ডসমূহকে কাস্টমাইজ বা পরিবর্তন করতে ব্যবহৃত হয়। আপনি নতুন ফিল্ড তৈরি করতে পারেন বা আগের ফিল্ডগুলো বাদ দিতে পারেন।
    • উদাহরণ:

      db.collectionName.aggregate([
        { $project: { name: 1, age: 1, isAdult: { $gte: ["$age", 18] } } }
      ])
      

      এখানে একটি নতুন isAdult ফিল্ড তৈরি হচ্ছে, যা true অথবা false হবে, নির্ভর করে age ফিল্ডের মান ১৮ এর বেশি কিনা।

  5. $limit:
    এই স্টেজটি ডেটার একটি নির্দিষ্ট সংখ্যা রিটার্ন করে।
    • উদাহরণ:

      db.collectionName.aggregate([
        { $limit: 5 }
      ])
      

      এখানে সর্বাধিক ৫টি ডকুমেন্ট রিটার্ন করা হবে।

  6. $skip:
    এই স্টেজটি ডেটার প্রথম N সংখ্যক ডকুমেন্ট বাদ দেয়। এটি SQL এর LIMIT OFFSET এর মতো কাজ করে।
    • উদাহরণ:

      db.collectionName.aggregate([
        { $skip: 10 }
      ])
      

      এখানে প্রথম ১০টি ডকুমেন্ট বাদ দিয়ে পরবর্তী ডকুমেন্টগুলো রিটার্ন করা হবে।

  7. $unwind:
    এই স্টেজটি একটি অ্যারে ফিল্ডকে একাধিক ডকুমেন্টে বিভক্ত করে। এটি JSON অ্যারে গঠনকে স্ট্রাকচার করে প্রতিটি উপাদানকে আলাদা ডকুমেন্টে রূপান্তর করে।
    • উদাহরণ:

      db.collectionName.aggregate([
        { $unwind: "$tags" }
      ])
      

      এখানে tags অ্যারের প্রতিটি উপাদানকে আলাদা ডকুমেন্টে রূপান্তরিত করা হচ্ছে।

  8. $addFields:
    এই স্টেজটি নতুন ফিল্ড যোগ করতে ব্যবহৃত হয় বা আগের ফিল্ডগুলোর মান পরিবর্তন করতে ব্যবহৃত হয়।
    • উদাহরণ:

      db.collectionName.aggregate([
        { $addFields: { fullName: { $concat: ["$firstName", " ", "$lastName"] } } }
      ])
      

      এখানে fullName নামক একটি নতুন ফিল্ড তৈরি হচ্ছে যা firstName এবং lastName ফিল্ডগুলির মান একত্রিত করে।


Aggregation এর উদাহরণ

উদাহরণ ১: গ্রুপিং এবং গননা

ডেটা গ্রুপ করে প্রতিটি গ্রুপের ডকুমেন্ট সংখ্যা গোনা:

db.orders.aggregate([
  { $group: { _id: "$product", totalOrders: { $sum: 1 } } }
])

এখানে, প্রতিটি পণ্য (product) ভিত্তিতে ডেটা গ্রুপ করা হচ্ছে এবং প্রতিটি গ্রুপের মধ্যে মোট অর্ডারের সংখ্যা গোনা হচ্ছে।

উদাহরণ ২: ডেটা ফিল্টারিং এবং সোর্টিং

বয়স ৩০ এর বেশি এমন ব্যবহারকারীদের ডেটা সজ্জিত করা:

db.users.aggregate([
  { $match: { age: { $gt: 30 } } },
  { $sort: { name: 1 } }
])

এখানে প্রথমে বয়স ৩০ এর বেশি ব্যবহারকারীদের ফিল্টার করা হচ্ছে এবং তারপর তাদের নামের ভিত্তিতে ascending অর্ডারে সাজানো হচ্ছে।

উদাহরণ ৩: অ্যাগ্রিগেশন পিপলাইন এবং প্রজেকশন

ডেটার নির্দিষ্ট ফিল্ড কাস্টমাইজ করা:

db.users.aggregate([
  { $project: { fullName: { $concat: ["$firstName", " ", "$lastName"] }, age: 1 } }
])

এখানে fullName নামক নতুন ফিল্ড তৈরি করা হচ্ছে, যা firstName এবং lastName এর মান নিয়ে গঠিত এবং age ফিল্ডটিও রিটার্ন হচ্ছে।


সারাংশ

MongoDB তে aggregation ডেটা প্রক্রিয়াকরণ এবং বিশ্লেষণের জন্য একটি শক্তিশালী টুল। এটি ডেটাকে বিভিন্ন স্টেপে প্রক্রিয়াকরণ করে নির্দিষ্ট ফলাফল প্রদান করে, যা ডেটার ওপর গ্রুপিং, সোর্টিং, ফিল্টারিং এবং অন্যান্য অ্যাগ্রিগেশন অপারেশন করতে সহায়তা করে। Aggregation Pipeline এর মাধ্যমে MongoDB তে ডেটা প্রক্রিয়াকরণ খুবই নমনীয় এবং সহজে কাস্টমাইজ করা যায়, যা বড় ডেটাবেসের জন্য একটি গুরুত্বপূর্ণ সুবিধা।

Content added By
Promotion

Are you sure to start over?

Loading...