Bird
Raised Fist0
MongoDBquery~10 mins

$sum accumulator in MongoDB - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - $sum accumulator
Start with empty sum = 0
↓
Read each document's value
↓
Add value to sum
↓
Repeat for all documents
↓
Output total sum
The $sum accumulator adds up values from each document in a group and outputs the total sum.
Execution Sample
MongoDB
db.sales.aggregate([
  { $group: { _id: null, totalSales: { $sum: "$amount" } } }
])
This query sums the 'amount' field from all documents in the 'sales' collection.
Execution Table
StepDocument amountCurrent sumActionSum after action
11000Add 100 to sum100
2200100Add 200 to sum300
350300Add 50 to sum350
4150350Add 150 to sum500
5-500No more documentsFinal sum = 500
💡 All documents processed, sum accumulator outputs 500
Variable Tracker
VariableStartAfter 1After 2After 3After 4Final
sum0100300350500500
Key Moments - 2 Insights
Why does the sum start at 0 before adding any values?
The sum accumulator initializes at 0 to correctly add values from documents. See execution_table row 1 where sum is 0 before adding the first amount.
What happens if a document's amount field is missing or null?
If the amount is missing or null, $sum treats it as 0 and does not change the sum. This is why each addition explicitly adds the document's amount value if present.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the sum after processing the second document?
A100
B200
C300
D350
💡 Hint
Check the 'Sum after action' column at step 2 in the execution_table.
At which step does the sum reach 500?
AStep 3
BStep 4
CStep 5
DStep 2
💡 Hint
Look at the 'Sum after action' column and find when it first shows 500.
If the third document's amount was 0 instead of 50, what would the sum be after step 3?
A300
B350
C250
D500
💡 Hint
Refer to variable_tracker and consider how sum changes when adding 0 instead of 50.
Concept Snapshot
$sum accumulator in MongoDB groups documents and adds values.
Starts at 0, adds each document's field value.
Ignores missing or null values as 0.
Outputs total sum after processing all documents.
Full Transcript
The $sum accumulator in MongoDB is used to add up values from documents in a group. It starts with a sum of zero. For each document, it reads the value of the specified field and adds it to the sum. This continues until all documents are processed. If a document does not have the field or it is null, it adds zero. The final output is the total sum of all values. For example, if documents have amounts 100, 200, 50, and 150, the sum accumulates as 100, then 300, then 350, and finally 500. This process helps quickly calculate totals in aggregation queries.

Practice

(1/5)
1. What does the $sum accumulator do in a MongoDB aggregation pipeline?
easy
A. Adds values together or counts documents within groups
B. Finds the average value of a field
C. Sorts documents in ascending order
D. Filters documents based on a condition

Solution

  1. Step 1: Understand the role of $sum

    The $sum accumulator adds numeric values or counts documents when used in a $group stage.
  2. Step 2: Compare with other accumulators

    Unlike $avg which calculates averages, $sum only totals values or counts documents.
  3. Final Answer:

    Adds values together or counts documents within groups -> Option A
  4. Quick Check:

    $sum = Adds or counts [OK]
Hint: Remember: $sum totals numbers or counts docs [OK]
Common Mistakes:
  • Confusing $sum with $avg
  • Thinking $sum sorts data
  • Assuming $sum filters documents
2. Which of the following is the correct syntax to sum the field price in a $group stage?
easy
A. { $group: { _id: null, total: { $sum: "price" } } }
B. { $group: { _id: null, total: { $sum: "$price" } } }
C. { $group: { _id: null, total: { $sum: price } } }
D. { $group: { _id: null, total: { sum: "$price" } } }

Solution

  1. Step 1: Identify correct field reference syntax

    In MongoDB aggregation, field names must be prefixed with "$" inside expressions, so "$price" is correct.
  2. Step 2: Check accumulator syntax

    The accumulator must be $sum, not sum, and the value must be a string with "$" prefix.
  3. Final Answer:

    { $group: { _id: null, total: { $sum: "$price" } } } -> Option B
  4. Quick Check:

    Use $sum with "$field" syntax [OK]
Hint: Use "$field" inside $sum in $group [OK]
Common Mistakes:
  • Omitting the $ before field name
  • Using sum instead of $sum
  • Not quoting the field name
3. Given the collection documents:
{ "category": "A", "value": 10 }
{ "category": "A", "value": 20 }
{ "category": "B", "value": 5 }

What will be the output of this aggregation?
[{ $group: { _id: "$category", totalValue: { $sum: "$value" } } }]
medium
A. [{ "_id": "A", "totalValue": 30 }, { "_id": "B", "totalValue": 5 }]
B. [{ "_id": "A", "totalValue": 10 }, { "_id": "B", "totalValue": 5 }]
C. [{ "_id": "A", "totalValue": 20 }, { "_id": "B", "totalValue": 5 }]
D. [{ "_id": null, "totalValue": 35 }]

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 per group

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

    [{ "_id": "A", "totalValue": 30 }, { "_id": "B", "totalValue": 5 }] -> Option A
  4. Quick Check:

    Sum values per category [OK]
Hint: Sum values grouped by _id field [OK]
Common Mistakes:
  • Summing without grouping
  • Using null _id causing single group
  • Adding only one document's value
4. Consider this aggregation pipeline:
[{ $group: { _id: "$type", total: { $sum: value } } }]

What is the error in this pipeline?
medium
A. The _id field cannot be a string
B. Missing $group stage
C. Cannot use $sum inside $group
D. Field name 'value' should be quoted and prefixed with $ inside $sum

Solution

  1. Step 1: Check field reference inside $sum

    The field 'value' must be referenced as "$value" (string with $ prefix) inside $sum.
  2. Step 2: Confirm correct $group usage

    The $group stage is present and _id is correctly set to "$type".
  3. Final Answer:

    Field name 'value' should be quoted and prefixed with $ inside $sum -> Option D
  4. Quick Check:

    Use "$field" inside $sum [OK]
Hint: Always quote and prefix field with $ inside $sum [OK]
Common Mistakes:
  • Using unquoted field names inside $sum
  • Thinking $sum can't be used in $group
  • Misunderstanding _id usage
5. You have a collection of sales documents with fields store and amount. You want to find the total sales per store but only for stores with total sales above 1000. Which aggregation pipeline correctly uses $sum and filters the results?
hard
A. [{ $match: { amount: { $gt: 1000 } } }, { $group: { _id: "$store", totalSales: { $sum: "$amount" } } }]
B. [{ $group: { _id: "$store", totalSales: { $sum: "$amount" } } }, { $match: { amount: { $gt: 1000 } } }]
C. [{ $group: { _id: "$store", totalSales: { $sum: "$amount" } } }, { $match: { totalSales: { $gt: 1000 } } }]
D. [{ $group: { _id: "$store", totalSales: { $sum: "$amount" } } }, { $match: { _id: { $gt: 1000 } } }]

Solution

  1. Step 1: Group sales by store and sum amounts

    The first stage groups documents by "store" and sums the "amount" field into "totalSales".
  2. Step 2: Filter groups with totalSales greater than 1000

    The second stage uses $match on the aggregated field "totalSales" to keep only stores with totals above 1000.
  3. Final Answer:

    [{ $group: { _id: "$store", totalSales: { $sum: "$amount" } } }, { $match: { totalSales: { $gt: 1000 } } }] -> Option C
  4. Quick Check:

    Group then filter on sum field [OK]
Hint: Group first, then filter on summed field [OK]
Common Mistakes:
  • Filtering before grouping
  • Filtering on original amount instead of totalSales
  • Filtering on wrong field name
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