Bird
Raised Fist0
MongoDBquery~10 mins

$avg accumulator in MongoDB - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to calculate the average score from the scores collection.

MongoDB
db.scores.aggregate([{ $group: { _id: null, averageScore: { $[1]: "$score" } } }])
Drag options to blanks, or click blank then click option'
Aavg
Bsum
Cmax
Dmin
Attempts:
3 left
💡 Hint
Common Mistakes
Using $sum instead of $avg.
Using $max or $min which find maximum or minimum values.
2fill in blank
medium

Complete the code to calculate the average price for each product category.

MongoDB
db.products.aggregate([{ $group: { _id: "$category", avgPrice: { $[1]: "$price" } } }])
Drag options to blanks, or click blank then click option'
Asum
Bavg
Ccount
Dfirst
Attempts:
3 left
💡 Hint
Common Mistakes
Using $sum which adds values instead of averaging.
Using $count which counts documents, not averages.
3fill in blank
hard

Fix the error in the aggregation to correctly compute the average rating.

MongoDB
db.reviews.aggregate([{ $group: { _id: "$productId", averageRating: { $[1]: "$rating" } } }])
Drag options to blanks, or click blank then click option'
Aavg
Bsum
Cmax
Dmin
Attempts:
3 left
💡 Hint
Common Mistakes
Missing the dollar sign before the field name.
Using $sum instead of $avg.
4fill in blank
hard

Fill both blanks to calculate the average age of users grouped by city.

MongoDB
db.users.aggregate([{ $group: { _id: "$city", [1]: { $avg: [2] } } }])
Drag options to blanks, or click blank then click option'
AaverageAge
B"$age"
C"age"
Dcount
Attempts:
3 left
💡 Hint
Common Mistakes
Using the field name without a dollar sign.
Using a wrong output field name like 'count'.
5fill in blank
hard

Fill all three blanks to compute the average score for each team and label the output field as 'teamAverage'.

MongoDB
db.scores.aggregate([{ $group: { _id: [1], [2]: { $[3]: "$score" } } }])
Drag options to blanks, or click blank then click option'
A"$team"
BteamAverage
Cavg
D"team"
Attempts:
3 left
💡 Hint
Common Mistakes
Forgetting the dollar sign in the group key.
Using $sum or other accumulators instead of $avg.
Naming the output field incorrectly.

Practice

(1/5)
1. What does the $avg accumulator do in a MongoDB aggregation pipeline?
easy
A. Calculates the average value of numeric fields in grouped documents
B. Counts the total number of documents in a collection
C. Finds the maximum value in a group of documents
D. Sorts documents in ascending order

Solution

  1. Step 1: Understand the purpose of $avg

    The $avg accumulator is designed to calculate the mean (average) of numeric values within grouped documents in an aggregation pipeline.
  2. Step 2: Compare with other accumulators

    Other accumulators like $sum, $max, and $count perform different tasks, so $avg specifically calculates averages.
  3. Final Answer:

    Calculates the average value of numeric fields in grouped documents -> Option A
  4. Quick Check:

    $avg = average calculation [OK]
Hint: Remember: $avg means average, not count or max [OK]
Common Mistakes:
  • Confusing $avg with $sum or $count
  • Thinking $avg sorts data
  • Assuming $avg works outside aggregation
2. Which of the following is the correct syntax to calculate the average of the field score in a MongoDB aggregation $group stage?
easy
A. { $group: { _id: null, avgScore: { $average: "$score" } } }
B. { $group: { _id: null, avgScore: { $avg: "$score" } } }
C. { $group: { _id: null, avgScore: { avg: "$score" } } }
D. { $group: { _id: null, avgScore: { $sum: "$score" } } }

Solution

  1. Step 1: Identify the correct accumulator name

    The correct MongoDB accumulator for average is $avg, not $average or avg.
  2. Step 2: Check the syntax structure

    The syntax requires the field name as a string with a $ prefix inside $avg, and the whole inside a $group stage with an _id.
  3. Final Answer:

    { $group: { _id: null, avgScore: { $avg: "$score" } } } -> Option B
  4. Quick Check:

    Correct syntax uses $avg with field string [OK]
Hint: Use $avg exactly, with field as "$fieldName" [OK]
Common Mistakes:
  • Using $average instead of $avg
  • Omitting quotes around field name
  • Using $sum instead of $avg
3. Given the collection students with documents:
{ "name": "Alice", "score": 80 }, { "name": "Bob", "score": 90 }, { "name": "Charlie", "score": 70 }

What will be the output of this aggregation?
[{ $group: { _id: null, averageScore: { $avg: "$score" } } }]
medium
A. [{ "_id": null, "averageScore": 240 }]
B. [{ "_id": null, "averageScore": 70 }]
C. [{ "_id": null, "averageScore": 80 }]
D. [{ "_id": null, "averageScore": 90 }]

Solution

  1. Step 1: Calculate the sum of scores

    Sum = 80 + 90 + 70 = 240.
  2. Step 2: Calculate the average

    Average = 240 / 3 = 80.
  3. Final Answer:

    [{ "_id": null, "averageScore": 80 }] -> Option C
  4. Quick Check:

    Average of 80, 90, 70 = 80 [OK]
Hint: Add all scores, divide by count for average [OK]
Common Mistakes:
  • Using sum instead of average
  • Picking minimum or maximum score
  • Forgetting to divide by number of documents
4. Consider this aggregation pipeline:
[{ $group: { _id: "$class", avgScore: { $avg: score } } }]

What is the error in this pipeline?
medium
A. Cannot use $avg inside $group
B. Missing $match stage before $group
C. The _id field cannot be "$class"
D. Field name 'score' should be a string with $ prefix: "$score"

Solution

  1. Step 1: Check the field reference inside $avg

    The field name must be a string with a $ prefix, so it should be "$score", not score.
  2. Step 2: Validate other parts of the pipeline

    Using "$class" as _id is valid, and $avg is allowed inside $group. $match is optional.
  3. Final Answer:

    Field name 'score' should be a string with $ prefix: "$score" -> Option D
  4. Quick Check:

    Field names in $avg need "$field" format [OK]
Hint: Always quote field names with $ in accumulators [OK]
Common Mistakes:
  • Using unquoted field names inside $avg
  • Thinking $match is mandatory before $group
  • Believing _id cannot be a field name
5. You have a collection sales with documents:
{ "region": "North", "amount": 100 }, { "region": "South", "amount": 200 }, { "region": "North", "amount": 300 }, { "region": "South", "amount": 400 }

Write an aggregation pipeline to find the average sales amount per region and identify the region with the highest average sales.
hard
A. [{ $group: { _id: "$region", avgAmount: { $avg: "$amount" } } }, { $sort: { avgAmount: -1 } }, { $limit: 1 }]
B. [{ $group: { _id: "$region", avgAmount: { $sum: "$amount" } } }, { $sort: { avgAmount: 1 } }]
C. [{ $group: { _id: "$region", avgAmount: { $avg: "$amount" } } }, { $match: { avgAmount: { $gt: 300 } } }]
D. [{ $group: { _id: "$region", avgAmount: { $avg: "$amount" } } }, { $sort: { avgAmount: 1 } }, { $limit: 1 }]

Solution

  1. Step 1: Group by region and calculate average

    Use $group with _id: "$region" and $avg: "$amount" to get average sales per region.
  2. Step 2: Sort descending by average and limit to top

    Sort by avgAmount descending (-1) to get highest average first, then limit to 1 document.
  3. Final Answer:

    [{ $group: { _id: "$region", avgAmount: { $avg: "$amount" } } }, { $sort: { avgAmount: -1 } }, { $limit: 1 }] -> Option A
  4. Quick Check:

    Group, sort descending, limit 1 = highest average [OK]
Hint: Group by region, avg, sort desc, limit 1 for highest [OK]
Common Mistakes:
  • Using $sum instead of $avg for average
  • Sorting ascending to get highest average
  • Not limiting results to top 1
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