DEV Community

Arjun Kumar
Arjun Kumar

Posted on

Mastering MongoDB Aggregation: 10 Practical Examples with Sample Data

Image descriptionMongoDB's aggregation framework is powerful yet often misunderstood. Whether you're prepping for interviews, building analytics, or learning data science workflows, mastering aggregation is essential. Below are 10 real-world problems, complete with queries and explanations, using a sample dataset of users.

Sample MongoDB Collection: users

[
  { "name": "Alice", "age": 28, "country": "USA", "gender": "female", "signupDate": "2023-12-20T10:15:00Z" },
  { "name": "Bob", "age": 34, "country": "Canada", "gender": "male", "signupDate": "2024-01-15T12:00:00Z" },
  { "name": "Charlie", "age": 22, "country": "India", "gender": "male", "signupDate": "2024-02-05T09:45:00Z" },
  { "name": "Diana", "age": 30, "country": "USA", "gender": "female", "signupDate": "2024-03-01T08:30:00Z" },
  { "name": "Eve", "age": 29, "country": "India", "gender": "female", "signupDate": "2024-01-25T11:20:00Z" },
  { "name": "Frank", "age": 40, "country": "Canada", "gender": "male", "signupDate": "2024-02-10T14:50:00Z" },
  { "name": "Grace", "age": 19, "country": "USA", "gender": "female", "signupDate": "2024-03-10T07:10:00Z" },
  { "name": "Harry", "age": 31, "country": "UK", "gender": "male", "signupDate": "2024-03-12T17:40:00Z" },
  { "name": "Ivy", "age": 27, "country": "India", "gender": "female", "signupDate": "2024-01-01T06:00:00Z" },
  { "name": "Jack", "age": 36, "country": "Canada", "gender": "male", "signupDate": "2024-02-20T18:15:00Z" }
]

Enter fullscreen mode Exit fullscreen mode

1. Count of Users by Country

[
  {
    $group: {
      _id: "$country",
      totalUsers: { $sum: 1 }
    }
  }
]
Enter fullscreen mode Exit fullscreen mode

2. Average Age by Gender

[
  {
    $group: {
      _id: "$gender",
      averageAge: { $avg: "$age" }
    }
  }
]
Enter fullscreen mode Exit fullscreen mode

3. Users Signed Up After February 1, 2024

[
  {
    $addFields: {
      signupDateConverted: {
        $toDate: "$signupDate"
      }
    }
  },
  {
    $match: {
      signupDateConverted: {
        $gte: ISODate("2024-02-01T00:00:00Z")
      }
    }
  }
]
Enter fullscreen mode Exit fullscreen mode

4. Count of Female Users by Country

[
  { $match: { gender: "female" } },
  {
    $group: {
      _id: "$country",
      femalePerCountry: { $sum: 1 }
    }
  }
]
Enter fullscreen mode Exit fullscreen mode

5. Group by Country After Sorting by Signup Date (Descending)

[
  { $sort: { signupDate: -1 } },
  {
    $group: {
      _id: "$country"
    }
  }
]
Enter fullscreen mode Exit fullscreen mode

6. Get the 3 Earliest Signups

[
  { $sort: { signupDate: 1 } },
  { $limit: 3 }
]
Enter fullscreen mode Exit fullscreen mode

7. All Indian Users Sorted by Age Descending

[
  { $match: { country: "India" } },
  { $sort: { age: -1 } }
]
Enter fullscreen mode Exit fullscreen mode

8. Count of Users Grouped by Month of Signup

[
  {
    $project: {
      monthYear: {
        $dateToString: {
          format: "%Y-%m",
          date: { $toDate: "$signupDate" }
        }
      }
    }
  },
  {
    $group: {
      _id: "$monthYear",
      userCount: { $sum: 1 }
    }
  },
  { $sort: { _id: 1 } }
]
Enter fullscreen mode Exit fullscreen mode

9. Average Age of Users Signed Up in 2024

[
  {
    $project: {
      year: {
        $dateToString: {
          format: "%Y",
          date: { $toDate: "$signupDate" }
        }
      },
      age: 1,
      name: 1,
      signupDate: 1
    }
  },
  { $match: { year: "2024" } },
  {
    $group: {
      _id: "$year",
      avgAge: { $avg: "$age" }
    }
  }
]
Enter fullscreen mode Exit fullscreen mode

10. Count of Users Aged 25 to 35 Grouped by Gender

[
  {
    $match: {
      age: { $gte: 25, $lte: 35 }
    }
  },
  {
    $group: {
      _id: "$gender",
      count: { $sum: 1 }
    }
  }
]
Enter fullscreen mode Exit fullscreen mode

MongoDB aggregations are incredibly versatile. From basic groupings to complex date manipulations, they can power dashboards, reports, and analytics. Bookmark this post for reference and practice daily!

Happy querying! 🚀

Heroku

Amplify your impact where it matters most — building exceptional apps.

Leave the infrastructure headaches to us, while you focus on pushing boundaries, realizing your vision, and making a lasting impression on your users.

Get Started

Top comments (0)

Image of Quadratic

Free AI chart generator

Upload data, describe your vision, and get Python-powered, AI-generated charts instantly.

Try Quadratic free

👋 Kindness is contagious

If you enjoyed the insights here, please consider leaving a ❤️ or a brief comment to share your thoughts!

Join DEV