From `orders` with an `items` array of product names, unwind items, then count how many times each item appears across all orders.
Problem Statement
Examples
Input: orders collection: +-----+----------+---------------------------------+ | _id | customer | items | +-----+----------+---------------------------------+ | 1 | A | ["Laptop","Mouse"] | | 2 | B | ["Laptop","Keyboard","Monitor"] | | 3 | C | ["Mouse","Keyboard"] | +-----+----------+---------------------------------+
Output: +----------+-------+ | _id | count | +----------+-------+ | Laptop | 2 | | Mouse | 2 | | Keyboard | 2 | | Monitor | 1 | +----------+-------+
Explanation: The aggregation pipeline processes the documents through stages to compute the grouped results.
Complexity
Time Complexity: -
Space Complexity: -
Hints
Editorial & Approach
Problem Overview & Intuition
To solve "Pipeline: Unwind + Match + Group", we query the MongoDB document store. The goal is to from `orders` with an `items` array of product names, unwind items, then count how many times each item appears across all orders. Using an aggregation pipeline, the database engine filters and structures the BSON documents efficiently.
Step-by-Step Approach
- Identify Target Collection: Access the collection through the
dbinstance. - Construct Query / Pipeline: Build the aggregation stages ($match, $group, $sort, etc.).
- Resolve Cursor: Invoke
.toArray()to transform the query cursor into the required array of documents.
Optimal Implementation (MongoDB)
function solve(db) {
return db.orders.aggregate([
{ $unwind: "$items" },
{ $group: { _id: "$items", count: { $sum: 1 } } },
{ $sort: { count: -1 } }
]);
}
Complexity Analysis
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.