Bird
Raised Fist0
Firebasecloud~20 mins

Limit and pagination in Firebase - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Firestore Pagination Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ service_behavior
intermediate
1:30remaining
Understanding Firestore Query Limit Behavior
You run a Firestore query with limit(5) on a collection with 10 documents. What will be the number of documents returned?
Firebase
const querySnapshot = await firestore.collection('users').limit(5).get();
const count = querySnapshot.size;
A10
B0
C5
DThrows an error
Attempts:
2 left
💡 Hint
Think about what the limit function does in Firestore queries.
❓ Architecture
intermediate
2:00remaining
Choosing Pagination Strategy in Firestore
You want to paginate through a large Firestore collection efficiently. Which approach is best to avoid skipping or repeating documents?
AUse <code>limit()</code> with <code>offset()</code> to skip documents
BUse <code>limit()</code> with <code>startAfter()</code> using the last document snapshot
CFetch all documents and slice the array in the client
DUse <code>limit()</code> with <code>where()</code> filtering by document ID
Attempts:
2 left
💡 Hint
Consider how Firestore handles offsets and document snapshots.
❓ Configuration
advanced
2:30remaining
Correct Firestore Query for Pagination with Limit
Which Firestore query correctly fetches the next 3 documents after a given document snapshot lastDoc?
Firebase
const lastDoc = await firestore.collection('items').orderBy('createdAt').limit(3).get().then(snap => snap.docs[2]);
Afirestore.collection('items').limit(3).startAfter(lastDoc).get()
Bfirestore.collection('items').orderBy('createdAt').startAt(lastDoc).limit(3).get()
Cfirestore.collection('items').orderBy('createdAt').offset(3).limit(3).get()
Dfirestore.collection('items').orderBy('createdAt').startAfter(lastDoc).limit(3).get()
Attempts:
2 left
💡 Hint
Remember the difference between startAfter and startAt.
❓ security
advanced
2:00remaining
Securing Paginated Firestore Queries
You want to ensure users can only paginate through their own documents in Firestore. Which security rule correctly enforces this?
Amatch /items/{itemId} { allow read: if request.auth.uid == resource.data.ownerId; }
Bmatch /items/{itemId} { allow read: if request.auth.uid != resource.data.ownerId; }
Cmatch /items/{itemId} { allow read: if true; }
Dmatch /items/{itemId} { allow read: if request.auth == null; }
Attempts:
2 left
💡 Hint
Think about how to restrict access to only the document owner.
🧠 Conceptual
expert
2:30remaining
Impact of Using Offset in Firestore Pagination
What is the main drawback of using offset() for pagination in Firestore compared to startAfter()?
AOffset causes Firestore to read and discard skipped documents, increasing cost and latency
BOffset automatically caches documents, reducing read costs
COffset guarantees no documents are skipped or repeated
DOffset is faster than startAfter because it uses indexes
Attempts:
2 left
💡 Hint
Consider how Firestore processes offset internally.

Practice

(1/5)
1. What does the limit() function do in Firebase queries?
easy
A. It restricts the number of documents returned by the query.
B. It sorts the documents in ascending order.
C. It filters documents based on a condition.
D. It deletes documents from the collection.

Solution

  1. Step 1: Understand the purpose of limit()

    The limit() function is used to control how many documents are returned in a query result.
  2. Step 2: Compare options with limit() behavior

    Only It restricts the number of documents returned by the query. correctly describes that limit() restricts the number of documents returned.
  3. Final Answer:

    It restricts the number of documents returned by the query. -> Option A
  4. Quick Check:

    limit() controls result count = B [OK]
Hint: Limit sets max items returned in query [OK]
Common Mistakes:
  • Confusing limit() with orderBy()
  • Thinking limit() filters data
  • Assuming limit() deletes data
2. Which of the following is the correct syntax to get the first 5 documents ordered by 'timestamp' in Firebase?
easy
A. db.collection('posts').limit(5).orderBy('timestamp')
B. db.collection('posts').orderBy('timestamp').limit(5)
C. db.collection('posts').limit(5, 'timestamp')
D. db.collection('posts').orderBy('timestamp', 5)

Solution

  1. Step 1: Recall correct method chaining order

    In Firebase, orderBy() must come before limit() to sort then limit results.
  2. Step 2: Check each option's method order and parameters

    db.collection('posts').orderBy('timestamp').limit(5) correctly orders by 'timestamp' then limits to 5 documents. Others have wrong order or invalid parameters.
  3. Final Answer:

    db.collection('posts').orderBy('timestamp').limit(5) -> Option B
  4. Quick Check:

    orderBy before limit = C [OK]
Hint: Always orderBy before limit in Firebase queries [OK]
Common Mistakes:
  • Placing limit() before orderBy()
  • Passing limit a field name
  • Using orderBy with a number parameter
3. Given this Firebase query code:
const firstPage = await db.collection('items').orderBy('name').limit(3).get();
const lastVisible = firstPage.docs[firstPage.docs.length - 1];
const nextPage = await db.collection('items').orderBy('name').startAfter(lastVisible).limit(3).get();
console.log(nextPage.docs.length);

What will be printed if the collection has 7 documents?
medium
A. 3
B. 4
C. 7
D. 0

Solution

  1. Step 1: Analyze first page query

    The first query orders by 'name' and limits to 3 documents, so it gets documents 1 to 3.
  2. Step 2: Analyze next page query

    The next query starts after the last document of the first page and limits to 3 documents. Since total is 7, remaining documents are 4 (docs 4 to 7), but limit(3) returns 3 documents.
  3. Final Answer:

    3 -> Option A
  4. Quick Check:

    7 total - 3 first page = 4 remaining, limit(3) = 3 [OK]
Hint: Subtract first page count from total for next page size [OK]
Common Mistakes:
  • Assuming next page always has same limit count
  • Ignoring startAfter effect
  • Counting all documents again
4. You wrote this Firebase pagination code but it throws an error:
const firstPage = await db.collection('users').limit(5).orderBy('age').get();

What is the error and how to fix it?
medium
A. Error: get() must be called before limit(); call get() first.
B. Error: limit() requires a field name; add 'age' as parameter.
C. Error: orderBy must come before limit; fix by swapping the methods.
D. No error; code works fine.

Solution

  1. Step 1: Identify method order error

    Firebase requires orderBy() before limit() to sort data before limiting.
  2. Step 2: Fix by swapping method calls

    Change code to db.collection('users').orderBy('age').limit(5).get() to fix the error.
  3. Final Answer:

    Error: orderBy must come before limit; fix by swapping the methods. -> Option C
  4. Quick Check:

    orderBy before limit fixes error = A [OK]
Hint: Always call orderBy before limit to avoid errors [OK]
Common Mistakes:
  • Calling limit before orderBy
  • Passing field name to limit
  • Calling get() too early
5. You want to paginate through a Firebase collection with 12 documents, showing 5 per page. After fetching the first two pages, how many documents will the third page query return?
hard
A. 0
B. 3
C. 5
D. 2

Solution

  1. Step 1: Calculate documents fetched in first two pages

    Each page shows 5 documents, so first two pages fetch 5 + 5 = 10 documents.
  2. Step 2: Calculate remaining documents for third page

    Total documents are 12, so remaining are 12 - 10 = 2 documents.
  3. Step 3: Consider limit on third page

    Limit is 5, but only 2 documents remain, so third page returns 2 documents.
  4. Final Answer:

    2 -> Option D
  5. Quick Check:

    12 - 10 = 2 documents left for page 3 [OK]
Hint: Subtract fetched docs from total to find last page size [OK]
Common Mistakes:
  • Assuming all pages have full 5 documents
  • Ignoring total document count
  • Confusing page number with document count
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard