0
0
MongoDBquery~30 mins

$facet for multiple pipelines in MongoDB - Mini Project: Build & Apply

Choose your learning style9 modes available
Using $facet for Multiple Pipelines in MongoDB Aggregation
📖 Scenario: You work at a bookstore that keeps its sales data in a MongoDB collection called sales. Each document records a book sale with fields like title, genre, price, and copies_sold.The manager wants to see two things at once: the total revenue per genre and the top 3 best-selling books overall.
🎯 Goal: Build a MongoDB aggregation query using $facet to run two pipelines simultaneously:One pipeline calculates total revenue per genre.The other pipeline finds the top 3 best-selling books overall.
📋 What You'll Learn
Create a sales collection with exact documents provided.
Add a variable minCopies set to 5 to filter popular books.
Write an aggregation query using $facet with two pipelines: revenueByGenre and topBooks.
In revenueByGenre, group by genre and sum total revenue (price * copies_sold).
In topBooks, filter books with copies_sold >= minCopies, sort by copies_sold descending, and limit to 3.
Complete the aggregation query with the db.sales.aggregate() call.
💡 Why This Matters
🌍 Real World
Bookstores and retail businesses often need to analyze sales data in multiple ways simultaneously, such as revenue by category and best sellers.
💼 Career
Understanding $facet helps database developers and analysts write efficient queries that return multiple summaries in one request, saving time and resources.
Progress0 / 4 steps
1
Create the sales collection with sample data
Create a variable called sales and assign it an array of these exact documents: {"title": "Book A", "genre": "Fiction", "price": 10, "copies_sold": 4}, {"title": "Book B", "genre": "Fiction", "price": 15, "copies_sold": 7}, {"title": "Book C", "genre": "Non-Fiction", "price": 20, "copies_sold": 5}, {"title": "Book D", "genre": "Non-Fiction", "price": 25, "copies_sold": 3}, {"title": "Book E", "genre": "Fiction", "price": 8, "copies_sold": 10}
MongoDB
Need a hint?
Create a list named sales with the exact book documents as shown.
2
Add a variable minCopies to filter popular books
Create a variable called minCopies and set it to 5.
MongoDB
Need a hint?
Just create a variable named minCopies and assign 5 to it.
3
Write the aggregation query using $facet with two pipelines
Create a variable called aggregationQuery and assign it the MongoDB aggregation pipeline array that uses $facet with two pipelines: revenueByGenre and topBooks. In revenueByGenre, group by genre and sum total revenue as totalRevenue (calculate price * copies_sold). In topBooks, filter documents where copies_sold is greater than or equal to minCopies, sort by copies_sold descending, and limit to 3.
MongoDB
Need a hint?
Use $facet with two pipelines named revenueByGenre and topBooks as described.
4
Complete the aggregation call with db.sales.aggregate()
Write a line of code that assigns to a variable called result the call to db.sales.aggregate() passing the aggregationQuery variable.
MongoDB
Need a hint?
Call db.sales.aggregate() with aggregationQuery and assign to result.