find() document retrieve করে। Aggregation pipeline সেগুলো transform করে — filter, group, reshape, আর নতুন value গণনা করে, chained stage-এর তৈরি একটা operation-এ, প্রতিটা এর output পরেরটাতে feed করে।
Stage object-এর একটা array সহ aggregate() call করুন — প্রতিটা object-এর key হলো stage operator, $ দিয়ে শুরু:
db.orders.aggregate([
{ $match: { status: "completed" } },
{ $group: { _id: "$customerId", total: { $sum: "$amount" } } },
{ $project: { customerId: "$_id", total: 1, _id: 0 } }
])$match একটা find() query-র মতো কাজ করে, আর সাধারণত প্রথম stage — তাড়াতাড়ি filter করা মানে প্রতিটা পরবর্তী stage কম document process করে:
{ $match: { status: "completed" } }$group _id-এর প্রতিটা আলাদা value-র জন্য একটাতে অনেক document collapse করে, $sum, $avg, $max, বা $count-এর মতো একটা accumulator দিয়ে প্রতিটা group-এর জন্য একটা value গণনা করে:
{ $group: { _id: "$customerId", total: { $sum: "$amount" } } }$project find()-এ একটা projection-এর মতো কাজ করে, কিন্তু নতুন field-ও গণনা করতে পারে, শুধু বিদ্যমানগুলো অন্তর্ভুক্ত বা বাদ দেওয়া না:
{ $project: { customerId: "$_id", total: 1, _id: 0 } }এই তিনটা stage অনেক দূর নিয়ে যায়
শুধু এই তিনটা stage — $match, $group, $project — ইতিমধ্যে real reporting query-র একটা বড় অংশ cover করে: "প্রতি customer-এর total খরচ," "প্রতিদিনের order," "প্রতি product-এর average rating।"