Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources

Aggregation Pipeline: $match and $group

1. Introduction

The MongoDB Aggregation Framework is a powerful tool for processing and transforming data. The $match and $group stages are crucial components of this framework, enabling developers to filter and summarize data effectively.

2. Key Concepts

  • Aggregation Pipeline: A framework that processes data records and returns computed results.
  • $match: A stage that filters documents to pass only those that match the specified condition.
  • $group: A stage that groups documents by specified identifiers and performs accumulations on them.

3. The $match Stage

The $match stage acts like a query filter, allowing only documents that meet certain criteria to pass to the next stage in the pipeline.

Example: Using $match


db.sales.aggregate([
    { $match: { status: "A" } }
])
            

This example filters the collection to include only documents where the status is "A".

4. The $group Stage

The $group stage allows for grouping documents based on a specified identifier and performing operations, such as sums or averages on those groups.

Example: Using $group


db.sales.aggregate([
    {
        $group: {
            _id: "$item",
            totalQuantity: { $sum: "$quantity" }
        }
    }
])
            

This example groups the documents by item and computes the total quantity sold for each item.

5. Best Practices

  • Always use $match as early as possible to reduce the dataset being processed.
  • Use $group to summarize data, but be mindful of performance implications on large datasets.
  • Combine stages efficiently, as the order can affect performance.
  • Utilize indexes where possible to enhance the speed of $match operations.

6. FAQ

What is the difference between $match and $group?

$match filters documents based on specific criteria, while $group aggregates and summarizes data by grouping documents.

Can I use $match after $group?

Yes, you can use $match after $group to filter the results of the aggregation.

What types of operations can I perform with $group?

You can perform operations such as $sum, $avg, $max, $min, and $count within the $group stage.