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 }
স্টেপ বাই স্টেপ ব্যাখ্যা:
$unwind: "$Marks"- Marks অ্যারে ফ্ল্যাটেন করে। ৩টি ডকুমেন্ট → ৪+৪+৩ = ১১টি ডকুমেন্ট (প্রতিটি মার্ক আলাদা)$match- Branch "CS" এবং Marks > 88 ফিল্টার। শুধু ৮৯ এবং ৯০ বাঁচে$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 যতটা সম্ভব পাইপলাইনের শুরুতে রাখুন (ইনডেক্স ব্যবহার করতে পারে)।