Nearby lessons

13 of 22

📊 MongoDB: Aggregation Pipeline Operators

MongoDB’s Aggregation Framework is used to process data records and return computed results. It works like a data processing pipeline, allowing you to filter, group, sort, and transform documents.

📚 Initial Data Setup

MongoDB Shell
NoSQL
Database
1db.students.insertMany([
2 { name: "Akshay Kumar", age: 23, class: "BCA" },
3 { name: "Rajesh Khanna", age: 24, class: "Btech" },
4 { name: "Shahid Kapoor", age: 20, class: "BSc" },
5 { name: "John Abraham", age: 19, class: "BCA" },
6 { name: "Aamir Khan", age: 24, class: "Btech" },
7 { name: "Sanjay Dutt", age: 21, class: "BSc" },
8 { name: "Sunil Shetty", age: 22, class: "BCA" },
9 { name: "Kartik Aryan", age: 20, class: "Btech" }
10]);
Query Result
JSON Output
✅ 8 student documents inserted successfully.

1️⃣ $match — Filter Documents

MongoDB Shell
NoSQL
Database
1db.students.aggregate([
2 { $match: { class: "BCA" } }
3]);
Query Result
JSON Output
[
{ name: "Akshay Kumar", age: 23, class: "BCA" },
{ name: "John Abraham", age: 19, class: "BCA" },
{ name: "Sunil Shetty", age: 22, class: "BCA" }
]

2️⃣ $count — Count Documents

MongoDB Shell
NoSQL
Database
1db.students.aggregate([
2 { $match: { class: "Btech" } },
3 { $count: "total_students" }
4]);
Query Result
JSON Output
[ { total_students: 3 } ]

3️⃣ $sort — Sort Documents

MongoDB Shell
NoSQL
Database
1db.students.aggregate([
2 { $sort: { age: -1 } }
3]);
Query Result
JSON Output
[
{ name: "Rajesh Khanna", age: 24, class: "Btech" },
{ name: "Aamir Khan", age: 24, class: "Btech" },
{ name: "Akshay Kumar", age: 23, class: "BCA" },
{ name: "Sunil Shetty", age: 22, class: "BCA" },
{ name: "Sanjay Dutt", age: 21, class: "BSc" },
{ name: "Shahid Kapoor", age: 20, class: "BSc" },
{ name: "Kartik Aryan", age: 20, class: "Btech" },
{ name: "John Abraham", age: 19, class: "BCA" }
]

4️⃣ $sortByCount — Count and Sort

MongoDB Shell
NoSQL
Database
1db.students.aggregate([
2 { $sortByCount: "$class" }
3]);
Query Result
JSON Output
[
{ _id: "Btech", count: 3 },
{ _id: "BCA", count: 3 },
{ _id: "BSc", count: 2 }
]

5️⃣ $project — Show Specific Fields

MongoDB Shell
NoSQL
Database
1db.students.aggregate([
2 { $project: { name: 1, age: 1, _id: 0 } }
3]);
Query Result
JSON Output
[
{ name: "Akshay Kumar", age: 23 },
{ name: "Rajesh Khanna", age: 24 },
{ name: "Shahid Kapoor", age: 20 },
{ name: "John Abraham", age: 19 },
{ name: "Aamir Khan", age: 24 },
{ name: "Sanjay Dutt", age: 21 },
{ name: "Sunil Shetty", age: 22 },
{ name: "Kartik Aryan", age: 20 }
]

6️⃣ $limit — Limit Results

MongoDB Shell
NoSQL
Database
1db.students.aggregate([
2 { $limit: 3 }
3]);
Query Result
JSON Output
[
{ name: "Akshay Kumar", age: 23, class: "BCA" },
{ name: "Rajesh Khanna", age: 24, class: "Btech" },
{ name: "Shahid Kapoor", age: 20, class: "BSc" }
]

7️⃣ $skip — Skip Results

MongoDB Shell
NoSQL
Database
1db.students.aggregate([
2 { $skip: 3 }
3]);
Query Result
JSON Output
[
{ name: "John Abraham", age: 19, class: "BCA" },
{ name: "Aamir Khan", age: 24, class: "Btech" },
{ name: "Sanjay Dutt", age: 21, class: "BSc" },
{ name: "Sunil Shetty", age: 22, class: "BCA" },
{ name: "Kartik Aryan", age: 20, class: "Btech" }
]

8️⃣ $sample — Get Random Documents

MongoDB Shell
NoSQL
Database
1db.students.aggregate([
2 { $sample: { size: 2 } }
3]);
Query Result
JSON Output
[
{ name: "Sunil Shetty", age: 22, class: "BCA" },
{ name: "Rajesh Khanna", age: 24, class: "Btech" }
]

9️⃣ $group — Group & Aggregate Data

MongoDB Shell
NoSQL
Database
1db.students.aggregate([
2 {
3 $group: {
4 _id: "$class",
5 avgAge: { $avg: "$age" }
6 }
7 }
8]);
Query Result
JSON Output
[
{ _id: "Btech", avgAge: 22.67 },
{ _id: "BCA", avgAge: 21.33 },
{ _id: "BSc", avgAge: 20.5 }
]

🔟 $sum — Count Students per Class

MongoDB Shell
NoSQL
Database
1db.students.aggregate([
2 {
3 $group: {
4 _id: "$class",
5 totalStudents: { $sum: 1 }
6 }
7 }
8]);
Query Result
JSON Output
[
{ _id: "Btech", totalStudents: 3 },
{ _id: "BCA", totalStudents: 3 },
{ _id: "BSc", totalStudents: 2 }
]

1️⃣1️⃣ $max — Find Oldest Student per Class

MongoDB Shell
NoSQL
Database
1db.students.aggregate([
2 {
3 $group: {
4 _id: "$class",
5 oldestAge: { $max: "$age" }
6 }
7 }
8]);
Query Result
JSON Output
[
{ _id: "Btech", oldestAge: 24 },
{ _id: "BCA", oldestAge: 23 },
{ _id: "BSc", oldestAge: 21 }
]

1️⃣2️⃣ $min — Find Youngest Student per Class

MongoDB Shell
NoSQL
Database
1db.students.aggregate([
2 {
3 $group: {
4 _id: "$class",
5 youngestAge: { $min: "$age" }
6 }
7 }
8]);
Query Result
JSON Output
[
{ _id: "Btech", youngestAge: 20 },
{ _id: "BCA", youngestAge: 19 },
{ _id: "BSc", youngestAge: 20 }
]

1️⃣3️⃣ $push — Collect All Names by Class

MongoDB Shell
NoSQL
Database
1db.students.aggregate([
2 {
3 $group: {
4 _id: "$class",
5 students: { $push: "$name" }
6 }
7 }
8]);
Query Result
JSON Output
[
{ _id: "Btech", students: ["Rajesh Khanna", "Aamir Khan", "Kartik Aryan"] },
{ _id: "BCA", students: ["Akshay Kumar", "John Abraham", "Sunil Shetty"] },
{ _id: "BSc", students: ["Shahid Kapoor", "Sanjay Dutt"] }
]

1️⃣4️⃣ $addToSet — Collect Unique Names by Class

MongoDB Shell
NoSQL
Database
1db.students.aggregate([
2 {
3 $group: {
4 _id: "$class",
5 uniqueStudents: { $addToSet: "$name" }
6 }
7 }
8]);
Query Result
JSON Output
[
{ _id: "Btech", uniqueStudents: ["Rajesh Khanna", "Aamir Khan", "Kartik Aryan"] },
{ _id: "BCA", uniqueStudents: ["Akshay Kumar", "John Abraham", "Sunil Shetty"] },
{ _id: "BSc", uniqueStudents: ["Shahid Kapoor", "Sanjay Dutt"] }
]

1️⃣5️⃣ $first — Get First Student per Class

MongoDB Shell
NoSQL
Database
1db.students.aggregate([
2 {
3 $group: {
4 _id: "$class",
5 firstStudent: { $first: "$name" }
6 }
7 }
8]);
Query Result
JSON Output
[
{ _id: "BCA", firstStudent: "Akshay Kumar" },
{ _id: "Btech", firstStudent: "Rajesh Khanna" },
{ _id: "BSc", firstStudent: "Shahid Kapoor" }
]

1️⃣6️⃣ $last — Get Last Student per Class

MongoDB Shell
NoSQL
Database
1db.students.aggregate([
2 {
3 $group: {
4 _id: "$class",
5 lastStudent: { $last: "$name" }
6 }
7 }
8]);
Query Result
JSON Output
[
{ _id: "BCA", lastStudent: "Sunil Shetty" },
{ _id: "Btech", lastStudent: "Kartik Aryan" },
{ _id: "BSc", lastStudent: "Sanjay Dutt" }
]

$top — Top Age Student per Class

MongoDB Shell
NoSQL
Database
1db.students.aggregate([
2 {
3 $sort: { age: -1 }
4 },
5 {
6 $group: {
7 _id: "$class",
8 topStudent: { $first: "$name" }
9 }
10 }
11]);
Query Result
JSON Output
[
{ _id: "BCA", topStudent: "Akshay Kumar" },
{ _id: "Btech", topStudent: "Aamir Khan" },
{ _id: "BSc", topStudent: "Sanjay Dutt" }
]

$topN — Top 2 Students by Age per Class

MongoDB Shell
NoSQL
Database
1db.students.aggregate([
2 { $sort: { age: -1 } },
3 {
4 $group: {
5 _id: "$class",
6 top2Students: { $topN: { output: "$name", sortBy: { age: -1 }, n: 2 } }
7 }
8 }
9]);
Query Result
JSON Output
[
{ _id: "BCA", top2Students: ["Akshay Kumar", "Sunil Shetty"] }
{ _id: "Btech", top2Students: ["Aamir Khan", "Rajesh Khanna"] }
{ _id: "BSc", top2Students: ["Sanjay Dutt", "Shahid Kapoor"] }
]

$bottom — Student with Lowest Age per Class

MongoDB Shell
NoSQL
Database
1db.students.aggregate([
2 { $sort: { age: 1 } },
3 {
4 $group: {
5 _id: "$class",
6 youngestStudent: { $first: "$name" }
7 }
8 }
9]);
Query Result
JSON Output
[
{ _id: "BCA", youngestStudent: "John Abraham" }
{ _id: "Btech", youngestStudent: "Kartik Aryan" }
{ _id: "BSc", youngestStudent: "Shahid Kapoor" }
]

$bottomN — Bottom 2 Students by Age per Class

MongoDB Shell
NoSQL
Database
1db.students.aggregate([
2 { $sort: { age: 1 } },
3 {
4 $group: {
5 _id: "$class",
6 bottom2Students: { $bottomN: { output: "$name", sortBy: { age: 1 }, n: 2 } }
7 }
8 }
9]);
Query Result
JSON Output
[
{ _id: "BCA", bottom2Students: ["John Abraham", "Sunil Shetty"] }
{ _id: "Btech", bottom2Students: ["Kartik Aryan", "Rajesh Khanna"] }
{ _id: "BSc", bottom2Students: ["Shahid Kapoor", "Sanjay Dutt"] }
]
Keep Going!MongoDB - Aggregation Operators