Bird
Raised Fist0
Firebasecloud~20 mins

Document-collection data model in Firebase - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Firestore Data Model Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ query_result
intermediate
2:00remaining
Retrieve all documents in a collection
Given a Firestore collection named users with documents containing fields name and age, what will be the output of this query?
Firebase
const snapshot = await db.collection('users').get();
const result = snapshot.docs.map(doc => doc.data());
console.log(result);
A[{name: 'Alice'}, {name: 'Bob'}]
B[{id: 'user1', name: 'Alice', age: 30}, {id: 'user2', name: 'Bob', age: 25}]
C[{name: 'Alice', age: 30}, {name: 'Bob', age: 25}]
D[]
Attempts:
2 left
💡 Hint
The doc.data() method returns only the fields inside the document, not the document ID.
🧠 Conceptual
intermediate
1:30remaining
Understanding subcollections in Firestore
Which statement correctly describes subcollections in Firestore?
ASubcollections are only allowed at the root level of the database.
BSubcollections are nested inside documents and can have their own documents and collections.
CSubcollections are stored as fields inside a document as arrays.
DSubcollections automatically merge with parent collections when queried.
Attempts:
2 left
💡 Hint
Think about how Firestore organizes data hierarchically.
📝 Syntax
advanced
1:30remaining
Correct Firestore document reference syntax
Which option correctly gets a reference to a document with ID 'doc1' inside the 'orders' collection?
Aconst docRef = db.collection('orders').doc('doc1');
Bconst docRef = db.doc('orders').collection('doc1');
Cconst docRef = db.collection('orders/doc1');
Dconst docRef = db.doc('orders/doc1');
Attempts:
2 left
💡 Hint
Remember the method to get a document inside a collection.
❓ optimization
advanced
2:00remaining
Efficiently querying nested subcollections
You want to retrieve all documents from the 'comments' subcollection under multiple 'posts' documents. Which approach is most efficient?
AUse a join query between 'posts' and 'comments' collections.
BStore all comments in a single top-level collection instead of subcollections.
CQuery each 'comments' subcollection under every 'posts' document separately.
DUse a collection group query on 'comments' to get all comments across posts.
Attempts:
2 left
💡 Hint
Firestore supports special queries to search across subcollections with the same name.
🔧 Debug
expert
2:30remaining
Identify the error in nested document creation
What error will this code produce when trying to add a document to a subcollection?
Firebase
await db.collection('users').doc('user1').collection('orders').add({item: 'book', price: 10});
ANo error; document is added successfully.
BReferenceError: db is not defined.
CFirebaseError: Missing or insufficient permissions.
DTypeError: collection is not a function.
Attempts:
2 left
💡 Hint
Check if the code syntax is correct and if the database reference is valid.

Practice

(1/5)
1. In Firebase's document-collection data model, what is the main container that holds documents?
easy
A. A collection
B. A table
C. A row
D. A field

Solution

  1. Step 1: Understand Firebase data structure

    Firebase stores data in documents, and these documents are grouped inside collections.
  2. Step 2: Identify the container for documents

    The container that holds multiple documents is called a collection, not a table, row, or field.
  3. Final Answer:

    A collection -> Option A
  4. Quick Check:

    Documents are inside collections [OK]
Hint: Remember: collections hold documents, like folders hold files [OK]
Common Mistakes:
  • Confusing collections with tables from SQL
  • Thinking documents are inside fields
  • Mixing up rows with documents
2. Which of the following is the correct way to reference a document named user123 inside a collection users in Firebase?
easy
A. db.collection('users').doc('user123')
B. db.doc('users').doc('user123')
C. db.collection('user123').doc('users')
D. db.users('user123')

Solution

  1. Step 1: Recall Firebase syntax for document reference

    To get a document inside a collection, use collection('name').doc('id').
  2. Step 2: Match the correct syntax

    db.collection('users').doc('user123') uses db.collection('users').doc('user123'), which is the standard way.
  3. Final Answer:

    db.collection('users').doc('user123') -> Option A
  4. Quick Check:

    Use collection then doc to reference documents [OK]
Hint: Use collection('name').doc('id') to get a document [OK]
Common Mistakes:
  • Swapping collection and doc order
  • Using dot notation like db.users('user123')
  • Using doc with full path incorrectly
3. Given this code snippet in Firebase:
const docRef = db.collection('books').doc('book1');
await docRef.set({ title: 'Learn Firebase', pages: 150 });
const snapshot = await db.collection('books').get();
const titles = snapshot.docs.map(doc => doc.data().title);
console.log(titles);
What will be printed in the console if the 'books' collection was empty before?
medium
A. []
B. ['book1']
C. ['Learn Firebase']
D. Error: Cannot read property 'title' of undefined

Solution

  1. Step 1: Understand the code flow

    The code adds a document 'book1' with title and pages to 'books' collection, then fetches all documents in 'books'.
  2. Step 2: Analyze the output of mapping titles

    Since 'books' was empty before, after adding 'book1', the collection has one document with title 'Learn Firebase'. Mapping titles returns ['Learn Firebase'].
  3. Final Answer:

    ['Learn Firebase'] -> Option C
  4. Quick Check:

    Added one doc, so titles list has one title [OK]
Hint: After set(), collection has that document; map titles returns it [OK]
Common Mistakes:
  • Thinking snapshot is empty before set()
  • Confusing document ID with title
  • Expecting error due to async code
4. Consider this Firebase code snippet:
const userRef = db.collection('users').doc('user1');
userRef.get().then(doc => {
  if (doc.exists) {
    console.log(doc.data().name);
  } else {
    console.log('No such document!');
  }
});
If the document 'user1' does not exist, what will be printed?
medium
A. undefined
B. 'No such document!'
C. Error: doc.data() is undefined
D. null

Solution

  1. Step 1: Check the existence condition

    The code checks if doc.exists is true before accessing data.
  2. Step 2: Understand behavior when document missing

    If the document does not exist, doc.exists is false, so it prints 'No such document!'.
  3. Final Answer:

    'No such document!' -> Option B
  4. Quick Check:

    doc.exists false triggers else block [OK]
Hint: Check doc.exists before accessing data to avoid errors [OK]
Common Mistakes:
  • Trying to access data without checking doc.exists
  • Expecting undefined or null instead of message
  • Confusing doc.exists with doc.data()
5. You want to store a list of users, each with multiple addresses, in Firebase. Which data model best fits this scenario?
hard
A. One document 'users' containing all users and their addresses as nested arrays
B. A single collection 'addresses' with documents containing user info and address combined
C. Multiple collections named after each user containing address documents
D. A collection 'users' with documents for each user, each containing a subcollection 'addresses' with address documents

Solution

  1. Step 1: Understand hierarchical data in Firebase

    Firebase supports subcollections inside documents, which is ideal for related nested data.
  2. Step 2: Choose the best structure for users and their multiple addresses

    Using a 'users' collection with each user document having an 'addresses' subcollection keeps data organized and scalable.
  3. Final Answer:

    A collection 'users' with documents for each user, each containing a subcollection 'addresses' with address documents -> Option D
  4. Quick Check:

    Use subcollections for nested related data [OK]
Hint: Use subcollections for nested lists like addresses per user [OK]
Common Mistakes:
  • Storing all users and addresses in one big document
  • Mixing user and address data in one collection without hierarchy
  • Creating many collections named after users
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