Aggregation pipeline xử lý document qua một chuỗi stage, mỗi stage biến đổi luồng document rồi truyền sang stage kế — như đường ống, giống GROUP BY/JOIN/biến đổi trong SQL nhưng theo từng bước.
Các stage hay dùng:
- $match: lọc (như WHERE) — đặt sớm để giảm dữ liệu và tận dụng index.
- $group: gộp theo khóa và tính tổng hợp ($sum, $avg, $max).
- $project / $addFields: chọn/định hình lại field, tính field mới.
- $sort, $limit, $skip: sắp xếp/phân trang.
- $lookup: "join" sang collection khác.
- $unwind: tách mỗi phần tử mảng thành một document.
- $facet: chạy nhiều nhánh song song trên cùng input (faceted search); $graphLookup: lookup đệ quy cho dữ liệu cây/đồ thị.
Mẹo hiệu năng: đặt $match/$sort sớm nhất có thể để dùng index và cắt bớt luồng trước các stage nặng. Dùng explain() để xem index có được tận dụng không.