Explorer
MongoDB

From `sales`, compute the `totalSales` (sum of amount), `averageSale` (avg of amount), `largestSale` (max amount), and `smallestSale` (min amount) across ALL sales.

Problem Statement

<p>From <code>sales</code>, compute the <code>totalSales</code> (sum of amount), <code>averageSale</code> (avg of amount), <code>largestSale</code> (max amount), and <code>smallestSale</code> (min amount) across ALL <code>sales</code>.</p>

Examples

Input: sales collection: +-----+--------+ | _id | amount | +-----+--------+ | 1 | 100 | | 2 | 250 | | 3 | 75 | | 4 | 500 | | 5 | 150 | +-----+--------+

Output: +------+------------+-------------+--------------+-------------+ | _id | totalSales | largestSale | smallestSale | averageSale | +------+------------+-------------+--------------+-------------+ | null | 1075 | 500 | 75 | 215 | +------+------------+-------------+--------------+-------------+

Explanation: The aggregation pipeline processes the documents through stages to compute the grouped results.

Complexity

Time Complexity: -

Space Complexity: -

Hints

šŸ’” Hint 1: This problem requires grouping documents by a key and aggregating values. Use db.<collection>.aggregate([...]) with a $group stage. šŸ’” Hint 2: In the $group stage, set _id to the grouping field (e.g. "$category" or "$dept") and use accumulator operators like $sum, $avg, $max, or $min. šŸ’” Hint 3: Remember to call .toArray() at the end of the aggregation pipeline to return the resolved documents array.

Editorial & Approach

Problem Overview & Intuition

To solve "Sales Dashboard Summary", we query the MongoDB document store. The goal is to from `sales`, compute the `totalsales` (sum of amount), `averagesale` (avg of amount), `largestsale` (max amount), and `smallestsale` (min amount) across all sales. Using an aggregation pipeline, the database engine filters and structures the BSON documents efficiently.

Step-by-Step Approach

  1. Identify Target Collection: Access the collection through the db instance.
  2. Construct Query / Pipeline: Build the aggregation stages ($match, $group, $sort, etc.).
  3. Resolve Cursor: Invoke .toArray() to transform the query cursor into the required array of documents.

Optimal Implementation (MongoDB)

function solve(db) {
  return db.sales.aggregate([
    { $group: {
      _id: null,
      totalSales: { $sum: "$amount" },
      averageSale: { $avg: "$amount" },
      largestSale: { $max: "$amount" },
      smallestSale: { $min: "$amount" }
    }}
  ]);
}

Complexity Analysis

Time Complexity O(N) pipeline traversal through aggregation stages.
Space Complexity O(M) intermediate document buffer in aggregation pipeline.

Key Considerations & Edge Cases

  • Empty Collections: If no documents match, the query cleanly returns an empty array [].
  • Missing / NULL Fields: Missing fields in documents are handled safely without throwing runtime exceptions.
  • Type Coercion: BSON types (ObjectId, Numbers, Strings) are compared strictly according to MongoDB specifications.

Sales Dashboard Summary

Hard

From sales, compute the totalSales (sum of amount), averageSale (avg of amount), largestSale (max amount), and smallestSale (min amount) across ALL sales.

Example Scenarios
1Example 1
Input:
sales collection
_idamount
1100
2250
375
4500
5150
Output:
_idtotalSaleslargestSalesmallestSaleaverageSale
null107550075215
Explanation:

The aggregation pipeline processes the documents through stages to compute the grouped results.

MongoDB Editor
Loading Editor...
Query Results (JSON)

Run your MongoDB code to see results here.