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

MongoDB-এ অ্যাগ্রিগেশন পাইপলাইন ব্যবহার করে রেকর্ড ফেচ করা

MongoDB অ্যাগ্রিগেশন পাইপলাইন হলো একটি মাল্টি-স্টেজ ডেটা প্রসেসিং ফ্রেমওয়ার্ক। প্রতিটি স্টেজ ডকুমেন্টগুলোকে ট্রান্সফর্ম করে নেক্সট স্টেজে পাস করে। এটি SQL-এর GROUP BY, JOIN, HAVING ইত্যাদির সমতুল্য এবং অধিক শক্তিশালী।

কলেকশন এবং ডকুমেন্ট তৈরি

> db.demo218.insertOne({"Name":"Chris","Branch":"CS",Marks:[65,78,36,90]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3e5f4903d395bdc2134712") }
> db.demo218.insertOne({"Name":"David","Branch":"ME",Marks:[56,45,42,51]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3e5f6203d395bdc2134713") }
> db.demo218.insertOne({"Name":"Chris","Branch":"CS",Marks:[78,65,89]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3e5f6c03d395bdc2134714") }

সব ডকুমেন্ট দেখানো

> db.demo218.find();

আউটপুট:

{ "_id" : ObjectId("5e3e5f4903d395bdc2134712"), "Name" : "Chris", "Branch" : "CS", "Marks" : [ 65, 78, 36, 90 ] }
{ "_id" : ObjectId("5e3e5f6203d395bdc2134713"), "Name" : "David", "Branch" : "ME", "Marks" : [ 56, 45, 42, 51 ] }
{ "_id" : ObjectId("5e3e5f6c03d395bdc2134714"), "Name" : "Chris", "Branch" : "CS", "Marks" : [ 78, 65, 89 ] }

অ্যাগ্রিগেশন পাইপলাইন কোয়ারী

৩ স্টেজের পাইপলাইন: $unwind (অ্যারে ফ্ল্যাটেন), $match (ফিল্টার), $group (গ্রুপিং):

> db.demo218.aggregate([
...   { "$unwind": "$Marks" },
...   { "$match": {
...     "Branch": "CS",
...     "Marks": { "$gt": 88 }
...   }},
...   { "$group": {
...     "_id": "$_id",
...     "Branch": { "$first": "$Branch" },
...     "Marks": { "$first": "$Marks" }
...   }}
... ]);

ফলাফল

{ "_id" : ObjectId("5e3e5f6c03d395bdc2134714"), "Branch" : "CS", "Marks" : 89 }
{ "_id" : ObjectId("5e3e5f4903d395bdc2134712"), "Branch" : "CS", "Marks" : 90 }

স্টেপ বাই স্টেপ ব্যাখ্যা:

  1. $unwind: "$Marks" - Marks অ্যারে ফ্ল্যাটেন করে। ৩টি ডকুমেন্ট → ৪+৪+৩ = ১১টি ডকুমেন্ট (প্রতিটি মার্ক আলাদা)
  2. $match - Branch "CS" এবং Marks > 88 ফিল্টার। শুধু ৮৯ এবং ৯০ বাঁচে
  3. $group - মূল ডকুমেন্ট _id অনুযায়ী আবার গ্রুপ। $first দিয়ে Branch এবং Marks নেওয়া (সব রোতে একই)

সাধারণ পাইপলাইন স্টেজসমূহ:

স্টেজকাজSQL সমতুল্য
$matchফিল্টারWHERE
$projectফিল্ড সিলেক্ট/রিনেমSELECT
$groupগ্রুপিং/অ্যাগ্রিগেশনGROUP BY
$sortসর্টিংORDER BY
$limit/$skipপেজিনেশনLIMIT/OFFSET
$lookupজয়েনJOIN
$unwindঅ্যারে ফ্ল্যাটেনCROSS JOIN / LATERAL
$addFieldsনতুন ফিল্ড যোগCOMPUTED COLUMN

পারফরম্যান্স টিপস: $match এবং $sort যতটা সম্ভব পাইপলাইনের শুরুতে রাখুন (ইনডেক্স ব্যবহার করতে পারে)।

  1. MongoDB Aggregation-এ নির্দিষ্ট ফিল্ড মান অনুযায়ী ডকুমেন্ট ফিল্টার করা

  2. MongoDB updateOne() এবং insertOne() ব্যবহার

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

  4. MySQL IN() অপারেটর ব্যবহার করে লাস্ট নেম অনুযায়ী রেকর্ড ফিল্টার করা