⬅ Previous Topic
Querying Nested Fields in MongoDBNext Topic ⮕
What are Indexes and Why Use Them⬅ Previous Topic
Querying Nested Fields in MongoDBNext Topic ⮕
What are Indexes and Why Use ThemWhen working with large datasets, it's inefficient to retrieve all records at once. Instead, you can use pagination
to fetch results in smaller chunks or pages. MongoDB provides three powerful methods to help with pagination:
limit(n)
– Returns only the first n
resultsskip(n)
– Skips the first n
resultssort()
– Orders the result setFirst, let's create a sample articles
collection with some dummy data for testing pagination.
db.articles.insertMany([
{ title: "Article 1", author: "Alice", views: 120 },
{ title: "Article 2", author: "Bob", views: 90 },
{ title: "Article 3", author: "Charlie", views: 75 },
{ title: "Article 4", author: "David", views: 200 },
{ title: "Article 5", author: "Eve", views: 60 },
{ title: "Article 6", author: "Frank", views: 150 }
]);
Output:
{ "acknowledged": true, "insertedIds": [ ...ObjectId values... ] }
If you only want to fetch the first 3 articles:
db.articles.find().limit(3);
Output:
[ { title: "Article 1", author: "Alice", views: 120 }, { title: "Article 2", author: "Bob", views: 90 }, { title: "Article 3", author: "Charlie", views: 75 } ]
Explanation: limit(3)
restricts the result to just the first 3 documents returned by the query.
Suppose you want to get the second page of results where each page shows 3 items:
db.articles.find().skip(3).limit(3);
Output:
[ { title: "Article 4", author: "David", views: 200 }, { title: "Article 5", author: "Eve", views: 60 }, { title: "Article 6", author: "Frank", views: 150 } ]
Explanation: skip(3)
skips the first 3 records. Combined with limit(3)
, it returns the next 3 documents — ideal for paginating through results.
You can sort the documents by a field before paginating. For example, to sort by views
in descending order:
db.articles.find().sort({ views: -1 }).limit(3);
Output:
[ { title: "Article 4", author: "David", views: 200 }, { title: "Article 6", author: "Frank", views: 150 }, { title: "Article 1", author: "Alice", views: 120 } ]
Explanation: sort({ views: -1 })
arranges the documents from highest to lowest number of views. Then limit(3)
fetches the top 3 most-viewed articles.
Let’s say we want to paginate sorted results — page 2, 3 results per page, sorted by views descending:
db.articles.find().sort({ views: -1 }).skip(3).limit(3);
Output:
[ { title: "Article 2", author: "Bob", views: 90 }, { title: "Article 3", author: "Charlie", views: 75 }, { title: "Article 5", author: "Eve", views: 60 } ]
Explanation: First, the articles are sorted by views
descending. Then we skip the first 3 and fetch the next 3 — perfect for page 2 of a paginated result set.
db.collection.find()
.sort({ field: 1 or -1 })
.skip((pageNumber - 1) * pageSize)
.limit(pageSize);
For example, for page 4
and page size 10
:
db.articles.find()
.sort({ views: -1 })
.skip((4 - 1) * 10)
.limit(10);
Q: Can I use skip without limit?
A: Yes, but that may return a large number of results. It's better to combine skip()
with limit()
to control result size.
Q: Can pagination slow down for large values of skip?
A: Yes, skip(n)
has to scan and discard n
documents. For very large datasets, consider using range-based pagination (e.g., using _id or timestamps).
Pagination in MongoDB is achieved using limit()
, skip()
, and optionally sort()
for ordered results. These methods let you efficiently retrieve data page-by-page — a common need in web and mobile applications.
⬅ Previous Topic
Querying Nested Fields in MongoDBNext Topic ⮕
What are Indexes and Why Use ThemYou can support this website with a contribution of your choice.
When making a contribution, mention your name, and programguru.org in the message. Your name shall be displayed in the sponsors list.