ডেটাবেস থেকে শুধু ডেটা ফেচ করা নয়, বরং ডেটাকে ফিল্টার, গ্রুপ এবং এনালাইজ করে রিপোর্ট তৈরি করার জন্য MongoDB-এর সবচেয়ে শক্তিশালী টুল হলো Aggregation Pipeline।
ধরি, আমাদের ই-কমার্স অ্যাপে গত ৩০ দিনে ৫,০০,০০০টি অর্ডার পড়েছে। এখন আমাদের ম্যানেজমেন্ট একটি রিপোর্ট চাইল: "গত মাসের টোটাল সেলস ক্যাটাগরি অনুযায়ী হিসাব করে দাও।"
ভুল পদ্ধতি (Application Level): আপনি যদি find() দিয়ে ৫ লাখ অর্ডার Node.js সার্ভারে নিয়ে আসেন এবং জাভাস্ক্রিপ্ট লুপ চালিয়ে সাম (Sum) করতে যান, তবে সার্ভারের RAM ফুল হয়ে অ্যাপ্লিকেশন ক্র্যাশ করবে (OOM Error)।
প্রো পদ্ধতি (Database Level): আমরা MongoDB Aggregation ব্যবহার করব। এতে পুরো প্রসেসিংটা সরাসরি ডাটাবেস ইঞ্জিনের (C++) ভেতরে হবে এবং ডাটাবেস শুধু একটি ছোট ফলাফল (যেমন: ৫টি ক্যাটাগরির টোটাল রেভিনিউ) নেটওয়ার্ক দিয়ে Node.js এ পাঠাবে। নেটওয়ার্ক ব্যান্ডউইথ ও সার্ভার মেমোরি দুটোই বেঁচে যাবে!
১০০ মেগাবাইট ডেটা নেটওয়ার্ক দিয়ে ফেচ করা -> Node.js CPU ও RAM ব্যবহার করে লুপ চালানো -> অত্যন্ত স্লো এবং ক্র্যাশ করার ঝুঁকি থাকে।
ডাটাবেস ইঞ্জিন তার অপ্টিমাইজড ইনডেক্স ব্যবহার করে হিসাব করে -> মাত্র ১ কিলোবাইট রেজাল্ট রিটার্ন করে। ব্লেজিং ফাস্ট!
Aggregation Pipeline অনেকটা কারখানার একটি এসেম্বলি লাইনের মতো কাজ করে। ডকুমেন্টসগুলো এক স্টেপ থেকে অন্য স্টেপে পাস হয় এবং ধাপে ধাপে রূপান্তরিত হয়:
নিচে একটি ইন্ডাস্ট্রি-স্ট্যান্ডার্ড কোড দেওয়া হলো, যার মাধ্যমে আমরা শেষ ৩০ দিনের সেরা ৫টি সেরা সেলিং ক্যাটাগরি বের করে আনি:
const Order = require('../models/Order'); exports.getTopCategories = async (req, res) => { const pipeline = [ // 1. Filter completed orders from the last 30 days { $match: { status: 'completed', createdAt: { $gte: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000) } }}, // 2. Group by category and calculate total revenue & units sold { $group: { _id: '$category', totalRevenue: { $sum: '$price' }, unitsSold: { $sum: 1 } }}, // 3. Sort by total revenue (Descending) { $sort: { totalRevenue: -1 } }, // 4. Limit to top 5 categories { $limit: 5 } ]; const report = await Order.aggregate(pipeline); res.json(report); };
নিচে পাইপলাইন স্টেজগুলো একটার পর একটা অন করুন। দেখুন কীভাবে কাঁচা কালেকশন ডেটা (Raw Collection) স্টেপে স্টেপে ফিল্টার হয়ে একটি সুন্দর বিজনেস রিপোর্টে পরিণত হয়।