Bird
Raised Fist0
MongoDBquery~5 mins

$group stage for aggregation in MongoDB - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of the $group stage in MongoDB aggregation?
The $group stage groups documents by a specified key and allows you to perform calculations like sums, averages, or counts on each group.
Click to reveal answer
beginner
In the $group stage, what does the _id field represent?
The _id field defines the key to group documents by. Each unique value of _id creates a separate group.
Click to reveal answer
beginner
How do you count the number of documents in each group using $group?
Use { $sum: 1 } inside the $group stage to add 1 for each document, effectively counting them.
Click to reveal answer
intermediate
What aggregation operators can be used inside $group to calculate totals or averages?
You can use $sum to add values, $avg to calculate averages, $max for maximum, and $min for minimum values.
Click to reveal answer
intermediate
Can $group stage change the shape of documents?
Yes, $group outputs one document per group with fields you define, so the shape can be very different from the original documents.
Click to reveal answer
What does the _id field in $group specify?
AThe name of the collection
BThe output document's unique identifier
CThe sorting order
DThe field to group documents by
Which operator counts documents in each group?
A$sum: 1
B$avg
C$max
D$min
Which operator calculates the average value in $group?
A$count
B$sum
C$avg
D$group
Can $group stage output documents with different fields than the input?
AYes, it creates new documents per group
BNo, it keeps the same fields
COnly if you use <code>$project</code>
DOnly if you use <code>$match</code>
Which of these is NOT a valid accumulator operator in $group?
A$sum
B$concat
C$max
D$avg
Explain how the $group stage works in MongoDB aggregation.
Think about how you would group items in real life, like grouping fruits by type and counting them.
You got /3 concepts.
    Describe how to count the number of documents in each group using $group.
    Counting is like adding one for each item in the group.
    You got /2 concepts.

      Practice

      (1/5)
      1. What is the main purpose of the $group stage in a MongoDB aggregation pipeline?
      easy
      A. To project specific fields from documents
      B. To filter documents based on a condition
      C. To sort documents in ascending or descending order
      D. To group documents by a specified key and perform calculations on each group

      Solution

      1. Step 1: Understand the role of $group

        The $group stage collects documents into groups based on a key defined in the _id field.
      2. Step 2: Identify what $group does with groups

        It allows performing calculations like sum, count, or average on each group.
      3. Final Answer:

        To group documents by a specified key and perform calculations on each group -> Option D
      4. Quick Check:

        $group groups and calculates [OK]
      Hint: Remember: $group always groups and aggregates [OK]
      Common Mistakes:
      • Confusing $group with $match for filtering
      • Thinking $group sorts documents
      • Assuming $group projects fields without grouping
      2. Which of the following is the correct syntax to group documents by the field category and count the number of documents in each group?
      easy
      A. { $group: { category: "$category", count: { $sum: 1 } } }
      B. { $group: { _id: "$category", count: { $sum: 1 } } }
      C. { $group: { _id: "$category", count: { $count: 1 } } }
      D. { $group: { _id: "$category", count: { $add: 1 } } }

      Solution

      1. Step 1: Identify the grouping key field

        The grouping key must be assigned to _id, so _id: "$category" is correct.
      2. Step 2: Use the correct accumulator for counting

        Counting documents uses $sum: 1 to add 1 for each document in the group.
      3. Final Answer:

        { $group: { _id: "$category", count: { $sum: 1 } } } -> Option B
      4. Quick Check:

        Group key in _id and count with $sum: 1 [OK]
      Hint: Always use _id for group key and $sum: 1 to count [OK]
      Common Mistakes:
      • Using field name instead of _id for grouping key
      • Using $count instead of $sum for counting
      • Using $add which is not an accumulator
      3. Given the collection documents:
      { "category": "A", "value": 10 }
      { "category": "B", "value": 20 }
      { "category": "A", "value": 15 }

      What will be the output of this aggregation?
      [{ $group: { _id: "$category", total: { $sum: "$value" } } }]
      medium
      A. [{ "_id": "A", "total": 25 }, { "_id": "B", "total": 20 }]
      B. [{ "_id": "A", "total": 10 }, { "_id": "B", "total": 20 }, { "_id": "A", "total": 15 }]
      C. [{ "_id": "A", "total": 15 }, { "_id": "B", "total": 20 }]
      D. [{ "_id": null, "total": 45 }]

      Solution

      1. Step 1: Group documents by category

        Documents with category "A" are grouped together, and category "B" separately.
      2. Step 2: Sum the value fields in each group

        For category "A": 10 + 15 = 25; for category "B": 20.
      3. Final Answer:

        [{ "_id": "A", "total": 25 }, { "_id": "B", "total": 20 }] -> Option A
      4. Quick Check:

        Sum values per category = correct totals [OK]
      Hint: Sum values grouped by _id key field [OK]
      Common Mistakes:
      • Expecting separate documents without grouping
      • Summing incorrectly or ignoring grouping
      • Using _id: null which groups all documents together
      4. Identify the error in this aggregation pipeline stage:
      { $group: { category: "$category", total: { $sum: "$amount" } } }
      medium
      A. Field names should not be in quotes
      B. Incorrect use of $sum operator
      C. Missing _id field for grouping key
      D. Aggregation pipeline stage must be an array

      Solution

      1. Step 1: Check for required _id field in $group

        The _id field is mandatory to specify the grouping key.
      2. Step 2: Verify other syntax elements

        The $sum operator and field references are correct; only _id is missing.
      3. Final Answer:

        Missing _id field for grouping key -> Option C
      4. Quick Check:

        _id is required in $group [OK]
      Hint: Always include _id in $group stage [OK]
      Common Mistakes:
      • Omitting the _id field
      • Confusing field names with grouping key
      • Thinking $sum needs special syntax
      5. You have a collection of sales documents with fields store, item, and quantity. You want to find the total quantity sold per store, but only for stores where the total quantity exceeds 100. Which aggregation pipeline correctly achieves this?
      hard
      A. [{ $group: { _id: "$store", totalQuantity: { $sum: "$quantity" } } }, { $match: { totalQuantity: { $gt: 100 } } }]
      B. [{ $match: { quantity: { $gt: 100 } } }, { $group: { _id: "$store", totalQuantity: { $sum: "$quantity" } } }]
      C. [{ $group: { _id: "$store", totalQuantity: { $sum: "$quantity" } } }, { $match: { _id: { $gt: 100 } } }]
      D. [{ $group: { _id: "$store", totalQuantity: { $sum: "$quantity" } } }, { $sort: { totalQuantity: -1 } }]

      Solution

      1. Step 1: Group by store and sum quantity

        The $group stage groups documents by store and calculates total quantity sold per store.
      2. Step 2: Filter groups where total quantity > 100

        The $match stage after grouping filters groups with totalQuantity greater than 100.
      3. Final Answer:

        [{ $group: { _id: "$store", totalQuantity: { $sum: "$quantity" } } }, { $match: { totalQuantity: { $gt: 100 } } }] -> Option A
      4. Quick Check:

        Group then filter by aggregated field [OK]
      Hint: Filter after grouping using $match on aggregated fields [OK]
      Common Mistakes:
      • Filtering before grouping which filters documents, not groups
      • Filtering on _id instead of aggregated field
      • Using $sort instead of filtering
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard