Bird
Raised Fist0
Firebasecloud~20 mins

Collection group queries in Firebase - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Collection Group Query Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ query_result
intermediate
2:00remaining
What documents does this collection group query return?

Consider a Firestore database with multiple subcollections named comments under different posts. Which documents will this query return?

const query = firestore.collectionGroup('comments').where('approved', '==', true);
Firebase
const query = firestore.collectionGroup('comments').where('approved', '==', true);
AAll documents in the root collection where 'approved' is true.
BOnly documents in the 'comments' subcollection of the root collection where 'approved' is true.
CAll documents in any 'comments' subcollection where the 'approved' field is true.
DDocuments in any collection named 'comments' but only if they are direct children of the root.
Attempts:
2 left
💡 Hint

Think about what collectionGroup does: it searches all subcollections with the given name, regardless of their parent.

📝 Syntax
intermediate
2:00remaining
Identify the syntax error in this collection group query

Which option contains the correct syntax for querying all documents in subcollections named reviews where the rating is greater than 4?

Firebase
firestore.collectionGroup('reviews').where('rating', '>', 4).get()
Afirestore.collectionGroup('reviews').where('rating' > 4).get()
Bfirestore.collectionGroup('reviews').where('rating', '>', 4).get()
Cfirestore.collectionGroup('reviews').where('rating', '=>', 4).get()
Dfirestore.collectionGroup('reviews').where('rating', 'gt', 4).get()
Attempts:
2 left
💡 Hint

Check the syntax of the where method parameters carefully.

❓ optimization
advanced
2:30remaining
How to optimize a collection group query with multiple filters?

You want to query all orders subcollections for documents where status is 'shipped' and total is greater than 100. Which approach optimizes performance best?

AUse a collection group query with a single <code>where</code> filter on <code>status</code> and ignore the <code>total</code> filter.
BRun two separate collection group queries, one filtering by <code>status</code> and one by <code>total</code>, then merge results in code.
CQuery the root collection and filter results in the client code after fetching all documents.
DUse a collection group query with two <code>where</code> filters: <code>.where('status', '==', 'shipped').where('total', '>', 100)</code> and create a composite index for these fields.
Attempts:
2 left
💡 Hint

Think about how Firestore uses indexes to speed up queries with multiple filters.

🔧 Debug
advanced
2:30remaining
Why does this collection group query fail with a missing index error?

This query fails with an error about a missing index:

firestore.collectionGroup('messages').where('sender', '==', 'alice').where('read', '==', false).get()

What is the cause?

AFirestore requires a composite index on 'sender' and 'read' fields for collection group queries with multiple filters.
BThe collection group name 'messages' is invalid and causes the error.
CThe query uses '==' operator twice which is not allowed in collection group queries.
DFirestore does not support filtering on boolean fields like 'read' in collection group queries.
Attempts:
2 left
💡 Hint

Check Firestore's indexing requirements for collection group queries with multiple filters.

🧠 Conceptual
expert
3:00remaining
What is a key limitation of collection group queries in Firestore?

Which of the following is a true limitation when using collection group queries?

ACollection group queries cannot include <code>orderBy</code> clauses on fields not included in the <code>where</code> filters without an index.
BYou cannot perform collection group queries on collections with different field structures.
CCollection group queries only work on root-level collections, not subcollections.
DYou can only query one collection group per Firestore database.
Attempts:
2 left
💡 Hint

Think about Firestore's indexing rules and how they affect ordering in queries.

Practice

(1/5)
1. What is the main purpose of a collection group query in Firebase Firestore?
easy
A. To delete an entire collection at once
B. To search documents across all collections with the same name
C. To update multiple documents in a single collection
D. To create a new collection with grouped documents

Solution

  1. Step 1: Understand collection group queries

    Collection group queries allow searching across all collections that share the same collection name, regardless of their location in the database.
  2. Step 2: Compare options

    Only To search documents across all collections with the same name describes searching across all collections with the same name. Other options describe different operations not related to collection group queries.
  3. Final Answer:

    To search documents across all collections with the same name -> Option B
  4. Quick Check:

    Collection group query = search across same-named collections [OK]
Hint: Collection group queries search all collections named the same [OK]
Common Mistakes:
  • Thinking collection group queries update or delete documents
  • Confusing collection group queries with single collection queries
  • Assuming collection group queries create new collections
2. Which of the following is the correct syntax to create a collection group query for all collections named comments in Firestore?
easy
A. firebase.firestore().collection('comments').where('text', '==', 'hello')
B. firebase.firestore().collection('comments').get()
C. firebase.firestore().collectionGroup('comments').where('text', '==', 'hello')
D. firebase.firestore().collectionGroup('comments').get()

Solution

  1. Step 1: Identify collection group query syntax

    The method collectionGroup('collectionName') is used to query all collections with that name.
  2. Step 2: Check options

    firebase.firestore().collectionGroup('comments').get() correctly uses collectionGroup('comments') and calls get() to fetch documents. firebase.firestore().collection('comments').get() uses collection which only queries one collection. Options C and D add filters but the question asks for syntax to create the query, not filtering.
  3. Final Answer:

    firebase.firestore().collectionGroup('comments').get() -> Option D
  4. Quick Check:

    Use collectionGroup('name') for group queries [OK]
Hint: Use collectionGroup('name') to query all same-named collections [OK]
Common Mistakes:
  • Using collection() instead of collectionGroup() for group queries
  • Adding filters when only syntax for query creation is asked
  • Confusing collectionGroup with collectionGroupQuery
3. Given the following Firestore data structure:
users/{userId}/posts/{postId}/comments/{commentId}

What will the following query return?
firebase.firestore().collectionGroup('comments').where('approved', '==', true).get()
medium
A. Only approved comments from the root 'comments' collection
B. All comments regardless of approval status
C. All approved comments from all users' posts
D. Syntax error because nested collections cannot be queried

Solution

  1. Step 1: Understand collection group query on nested collections

    The query uses collectionGroup('comments') which searches all collections named 'comments' anywhere in the database, including nested ones.
  2. Step 2: Apply the filter condition

    The where('approved', '==', true) filters only comments where the 'approved' field is true.
  3. Final Answer:

    All approved comments from all users' posts -> Option C
  4. Quick Check:

    collectionGroup + where filters = filtered docs from all same-named collections [OK]
Hint: collectionGroup queries nested collections by name with filters [OK]
Common Mistakes:
  • Thinking collectionGroup only queries root collections
  • Ignoring the filter condition in the query
  • Assuming syntax error for nested collections
4. You wrote this Firestore query:
firebase.firestore().collectionGroup('orders').where('status', '==', 'shipped').get()

But Firestore returns an error asking to create an index. What is the best way to fix this?
medium
A. Create a composite index for the 'orders' collection group on the 'status' field
B. Change the query to use collection() instead of collectionGroup()
C. Remove the where clause to avoid indexing
D. Restart the Firestore service to clear the error

Solution

  1. Step 1: Understand Firestore index requirements

    Firestore requires indexes for queries with filters on collection groups to optimize performance.
  2. Step 2: Fix the error by creating the required index

    The error message usually provides a link to create the needed composite index on the 'status' field for the 'orders' collection group.
  3. Final Answer:

    Create a composite index for the 'orders' collection group on the 'status' field -> Option A
  4. Quick Check:

    Index needed for filtered collectionGroup queries [OK]
Hint: Create indexes when Firestore requests for collection group filters [OK]
Common Mistakes:
  • Ignoring the index error and expecting query to work
  • Switching to collection() which won't query all collections
  • Removing filters to avoid indexing, losing query purpose
5. You want to find all reviews documents across your Firestore database where the rating is greater than 4, but only for reviews inside products collections (not other reviews collections). Your data structure is:
products/{productId}/reviews/{reviewId}
services/{serviceId}/reviews/{reviewId}

Which approach correctly achieves this using collection group queries?
hard
A. Use collectionGroup('reviews') and add a filter on a field indicating parent collection is 'products'
B. Use collectionGroup('reviews').where('rating', '>', 4) without filtering parent collection
C. Use collection('products').doc(productId).collection('reviews').where('rating', '>', 4)
D. Use collection('reviews').where('rating', '>', 4) to get all reviews with rating > 4

Solution

  1. Step 1: Understand collection group query scope

    collectionGroup('reviews') queries all 'reviews' collections regardless of parent collection.
  2. Step 2: Filter by parent collection

    Since you want only reviews under 'products', you must add a filter or structure your data to identify the parent collection, such as a field indicating the parent type.
  3. Step 3: Evaluate options

    Use collectionGroup('reviews') and add a filter on a field indicating parent collection is 'products' uses collectionGroup with a filter on a field indicating the parent collection, which is correct. Use collectionGroup('reviews').where('rating', '>', 4) without filtering parent collection lacks filtering by parent. Use collection('products').doc(productId).collection('reviews').where('rating', '>', 4) queries only one product's reviews, not all products. Use collection('reviews').where('rating', '>', 4) to get all reviews with rating > 4 is invalid because 'reviews' is not a root collection.
  4. Final Answer:

    Use collectionGroup('reviews') and add a filter on a field indicating parent collection is 'products' -> Option A
  5. Quick Check:

    Filter collectionGroup by parent info to limit scope [OK]
Hint: Add parent info filter to collectionGroup queries to limit scope [OK]
Common Mistakes:
  • Assuming collectionGroup can filter by parent collection automatically
  • Querying only one product's reviews instead of all
  • Using collection() on a non-root collection name
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