MongoDBAdvanced
Aggregation Pipeline
$match, $group, $project, $sort দিয়ে ডেটা প্রসেসিং ও report তৈরি — বাংলায়।
10টি অংশবাংলা ভাষায়
Aggregation কী?
Aggregation pipeline হলো ধাপে ধাপে ডেটা processes করার সিস্টেম। প্রতিটি stage আগের stage-এর output-এ কাজ করে — যেমন grouping, summing, joining, reshape।
Basic pipeline
Category ধরে বিক্রয়js
js
const result = await Order.aggregate([
// stage 1: শুধু paid order
{ $match: { status: "paid", createdAt: { $gte: startOfMonth } } },
// stage 2: category ধরে জমা
{
$group: {
_id: "$items.category",
totalOrders: { $sum: 1 },
revenue: { $sum: "$total" },
},
},
// stage 3: নাম cleaner
{ $project: { category: "$_id", totalOrders: 1, revenue: 1, _id: 0 } },
// stage 4: revenue অনুযায়ী সাজানো
{ $sort: { revenue: -1 } },
// stage 5: top ৫
{ $limit: 5 },
]);$lookup — aggregation-এ populate
$lookup joinjs
js
const ordersWithCustomer = await Order.aggregate([
{
$lookup: {
from: "users",
localField: "customer",
foreignField: "_id",
as: "customer",
},
},
{ $unwind: { path: "$customer", preserveNullAndEmptyArrays: true } },
{ $project: { total: 1, "customer.name": 1, "customer.email": 1 } },
]);Common stages
| Stage | কাজ |
|---|---|
$match | Filter (find-এর মতো) |
$group | Grouping + accumulation ($sum, $avg, $count) |
$project | Field নির্বাচন/reshape |
$sort | কোনো field ধরে সাজান |
$limit / $skip | পেজিনেশন |
$lookup | অন্য collection-এর সাথে join |
$unwind | Array-কে আলাদা document |
$count | মোট সংখ্যা |
Count + averagejs
js
const stats = await Rating.aggregate([
{ $match: { product: productId } },
{
$group: {
_id: null,
totalReviews: { $sum: 1 },
avgRating: { $avg: "$score" },
},
},
]);Aggregate vs Query
সাধারণ filter/sort-এর জন্য find() যথেষ্ট। grouping, sum, join, complex report লাগলে aggregation pipeline — কারণ এটি ডেটাবেসের ভেতরেই ঘটে, ডেটা সার্ভারে আনতে হয় না।
শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।