📖 Scenario: You are managing a small online bookstore database. You want to show customers a limited number of books per page and skip some books to create pages.
🎯 Goal: Build a MongoDB aggregation pipeline that uses $limit and $skip stages to paginate the list of books.
📋 What You'll Learn
Create a collection called books with 5 specific book documents.
Add a variable pageSize to control how many books show per page.
Add a variable pageNumber to control which page of books to show.
Write an aggregation pipeline using $skip and $limit to get the correct page of books.
💡 Why This Matters
🌍 Real World
Pagination is used in websites and apps to show data in small chunks, making it easier to browse large lists like books, products, or messages.
💼 Career
Knowing how to use <code>$limit</code> and <code>$skip</code> in MongoDB is essential for backend developers and database administrators to efficiently handle large datasets and improve user experience.
Use db.books.insertMany([...]) with the exact documents listed.
2
Add pageSize and pageNumber variables
Create two variables: pageSize set to 2, and pageNumber set to 2. These will control how many books to show per page and which page to show.
MongoDB
Hint
Use const pageSize = 2; and const pageNumber = 2; to create the variables.
3
Write the aggregation pipeline with $skip and $limit
Write a MongoDB aggregation pipeline on books that uses $skip with the value pageSize * (pageNumber - 1) and $limit with the value pageSize.
MongoDB
Hint
Use { $skip: pageSize * (pageNumber - 1) } and { $limit: pageSize } inside an array called pipeline.
4
Run the aggregation pipeline to get the paged books
Run the aggregation pipeline on the books collection using db.books.aggregate(pipeline) and assign the result to a variable called pagedBooks.
MongoDB
Hint
Use const pagedBooks = db.books.aggregate(pipeline); to run the pipeline and save the result.
Practice
(1/5)
1. What does the $limit stage do in a MongoDB aggregation pipeline?
easy
A. It skips a number of documents before returning results.
B. It groups documents by a specified field.
C. It sorts the documents in ascending order.
D. It restricts the number of documents returned.
Solution
Step 1: Understand the purpose of $limit
The $limit stage restricts the number of documents that pass through the pipeline to a specified count.
Step 2: Compare with other stages
$skip skips documents, $sort orders them, and $group groups them. Only $limit restricts count.
Final Answer:
It restricts the number of documents returned. -> Option D
Quick Check:
$limit = restrict count [OK]
Hint: Remember: limit = how many results you get [OK]
Common Mistakes:
Confusing $limit with $skip
Thinking $limit sorts data
Mixing $limit with $group
2. Which of the following is the correct syntax to skip 5 documents and then limit the result to 10 documents in a MongoDB aggregation pipeline?
easy
A. [{ $skip: 5 }, { $limit: 10 }]
B. [{ $limit: 10 }, { $skip: 5 }]
C. [{ $skip: 10 }, { $limit: 5 }]
D. [{ $limit: 5 }, { $skip: 10 }]
Solution
Step 1: Identify correct order of stages
To skip first, use $skip then limit results with $limit.
Step 2: Match syntax with values
Skipping 5 then limiting to 10 matches [{ $skip: 5 }, { $limit: 10 }].
Final Answer:
[{ $skip: 5 }, { $limit: 10 }] -> Option A
Quick Check:
Skip first, then limit [OK]
Hint: Skip first, then limit for paging [OK]
Common Mistakes:
Reversing $limit and $skip order
Using wrong numbers for skip and limit
Confusing syntax with find() options
3. Given a collection with documents numbered 1 to 10, what will be the output of this aggregation pipeline?
[{ $skip: 3 }, { $limit: 4 }]
medium
A. [1, 2, 3, 4]
B. [4, 5, 6, 7]
C. [3, 4, 5, 6]
D. [5, 6, 7, 8]
Solution
Step 1: Apply $skip: 3 on documents 1 to 10
Skipping 3 documents removes 1, 2, 3; remaining are 4 to 10.
Step 2: Apply $limit: 4 on remaining documents
Limit to 4 documents returns 4, 5, 6, 7.
Final Answer:
[4, 5, 6, 7] -> Option B
Quick Check:
Skip 3, then take 4 [OK]
Hint: Skip removes first N, limit picks next M [OK]
Common Mistakes:
Counting skip as inclusive
Mixing skip and limit values
Assuming skip resets numbering
4. You wrote this aggregation pipeline but it returns only 2 documents instead of skipping the first 3 from the full collection and limiting to 5:
[{ $limit: 5 }, { $skip: 3 }]
What is the problem?
medium
A. You need to use find() instead of aggregation for skip and limit.
B. The syntax is invalid; $skip cannot be used in aggregation.
C. $skip must come before $limit to work correctly.
D. The pipeline is missing a $match stage before $limit.
Solution
Step 1: Understand stage order effect
$limit first restricts to 5 documents, then $skip tries to skip 3 from those 5.
Step 2: Why it returns only 2 documents
Because $skip after $limit skips from a smaller set (first 5), not the full collection.
Final Answer:
$skip must come before $limit to work correctly. -> Option C
Quick Check:
Skip first, then limit [OK]
Hint: Order matters: skip before limit [OK]
Common Mistakes:
Placing $limit before $skip
Thinking $skip is invalid in aggregation
Confusing aggregation with find()
5. You want to implement pagination on a collection with 100 documents, showing 10 documents per page. Which aggregation pipeline correctly gets the 3rd page of results?
hard
A. [{ $skip: 20 }, { $limit: 10 }]
B. [{ $skip: 30 }, { $limit: 10 }]
C. [{ $limit: 10 }, { $skip: 20 }]
D. [{ $limit: 30 }, { $skip: 10 }]
Solution
Step 1: Calculate skip value for page 3
Each page shows 10 documents, so page 3 skips 2 pages x 10 = 20 documents.
Step 2: Apply skip and limit in correct order
Skip 20 documents, then limit to 10 documents to get page 3 results.
Final Answer:
[{ $skip: 20 }, { $limit: 10 }] -> Option A
Quick Check:
Skip (page-1)*size, then limit size [OK]
Hint: Skip (page-1)*size, then limit size [OK]
Common Mistakes:
Using wrong skip calculation
Reversing skip and limit order
Confusing page number with skip count
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.