Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Sorting Documents by Multiple Fields in MongoDB
📖 Scenario: You are managing a small online bookstore database. You want to organize the list of books so that customers can see the newest books first, and if two books have the same publication year, they should be sorted alphabetically by title.
🎯 Goal: Build a MongoDB query that sorts the books collection first by year in descending order, then by title in ascending order.
📋 What You'll Learn
Create a books collection with 5 documents containing title and year fields.
Define a variable sortOrder that specifies sorting by year descending and title ascending.
Write a query using find() and sort() with the sortOrder variable.
Assign the query result to a variable called sortedBooks.
💡 Why This Matters
🌍 Real World
Sorting data by multiple fields is common in databases to organize information clearly for users, such as sorting products by price and rating.
💼 Career
Database developers and data analysts often write queries that sort data by multiple criteria to prepare reports and improve user experience.
Progress0 / 4 steps
1
Create the books collection with sample data
Create a variable called books and assign it an array of 5 documents. Each document must have a title and a year field with these exact values: { title: 'The Hobbit', year: 1937 }, { title: '1984', year: 1949 }, { title: 'Brave New World', year: 1932 }, { title: 'Fahrenheit 451', year: 1953 }, { title: 'Animal Farm', year: 1945 }.
MongoDB
Hint
Use an array of objects with the exact titles and years given.
2
Define the sorting order
Create a variable called sortOrder and assign it an object that sorts by year in descending order (use -1) and then by title in ascending order (use 1).
MongoDB
Hint
Use an object with year: -1 and title: 1 to specify sorting order.
3
Write the query to sort the books
Create a variable called sortedBooks and assign it the result of calling db.books.find() followed by .sort(sortOrder) to sort the documents using the sortOrder variable.
MongoDB
Hint
Use db.books.find().sort(sortOrder) to get sorted results.
4
Complete the sorting query setup
Ensure the sortedBooks variable holds the sorted cursor from db.books.find().sort(sortOrder). This completes the sorting by multiple fields.
MongoDB
Hint
Make sure the sortedBooks variable is assigned the sorted query result.
Practice
(1/5)
1. What does sorting by multiple fields in MongoDB allow you to do?
easy
A. Organize data by more than one field in a specific order
B. Delete multiple fields from documents
C. Create new fields based on existing ones
D. Filter documents by multiple conditions
Solution
Step 1: Understand sorting purpose
Sorting arranges documents in order based on field values.
Step 2: Recognize multiple fields effect
Sorting by multiple fields means ordering by the first field, then by the second if the first is equal, and so on.
Final Answer:
Organize data by more than one field in a specific order -> Option A
Quick Check:
Sorting by multiple fields = Organize data by multiple fields [OK]
Hint: Sorting multiple fields orders by priority fields [OK]
Common Mistakes:
Confusing sorting with filtering
Thinking sorting creates or deletes fields
Assuming sorting only works on one field
2. Which of the following is the correct syntax to sort documents by age ascending and name descending in MongoDB?
easy
A. db.collection.find().sort({name: 1, age: -1})
B. db.collection.find().sort({age: -1, name: 1})
C. db.collection.find().sort({age: 1, name: -1})
D. db.collection.find().sort({age: 'asc', name: 'desc'})
Solution
Step 1: Recall sort syntax
MongoDB uses 1 for ascending and -1 for descending order in sort objects.
Step 2: Match fields and order
Sorting by age ascending (1) and name descending (-1) matches db.collection.find().sort({age: 1, name: -1}).
Final Answer:
db.collection.find().sort({age: 1, name: -1}) -> Option C
Hint: Sort priority follows field order in sort object [OK]
Common Mistakes:
Ignoring order of fields in sort
Mixing ascending and descending incorrectly
Assuming score sorts descending by default
4. Identify the error in this MongoDB sort query:
db.collection.find().sort({age: 1, name: 2})
medium
A. Using 2 instead of -1 or 1 for sorting order
B. Missing parentheses after find()
C. Using curly braces instead of square brackets
D. Sorting fields must be strings, not numbers
Solution
Step 1: Check valid sort values
MongoDB accepts only 1 (ascending) or -1 (descending) as sort values.
Step 2: Identify invalid value
Value 2 is invalid and causes syntax error.
Final Answer:
Using 2 instead of -1 or 1 for sorting order -> Option A
Quick Check:
Sort values must be 1 or -1 [OK]
Hint: Sort values must be 1 or -1, never other numbers [OK]
Common Mistakes:
Using numbers other than 1 or -1
Confusing sort object syntax
Assuming 2 means descending
5. You want to sort a collection by department ascending, then by salary descending, but only for employees with the same department. Which MongoDB query correctly achieves this?
hard
A. db.employees.find().sort({salary: -1, department: 1})
B. db.employees.find().sort({department: 1, salary: -1})
C. db.employees.find().sort({department: -1, salary: 1})
D. db.employees.find().sort({salary: 1, department: -1})
Solution
Step 1: Understand sorting priority
Sorting by department ascending means all employees grouped by department alphabetically.
Step 2: Sort salary descending within each department
Within each department group, employees are ordered by salary from highest to lowest.
Step 3: Match correct sort order
db.employees.find().sort({department: 1, salary: -1}) matches department:1 (ascending) and salary:-1 (descending).
Final Answer:
db.employees.find().sort({department: 1, salary: -1}) -> Option B
Quick Check:
Sort by department↑ then salary↓ = db.employees.find().sort({department: 1, salary: -1}) [OK]
Hint: Order fields in sort by priority, use 1 or -1 for direction [OK]
Common Mistakes:
Reversing field order in sort object
Using wrong sort directions
Assuming sorting salary first groups by salary only