Bird
Raised Fist0
Firebasecloud~10 mins

Migrating from Realtime Database to Firestore in Firebase - Step-by-Step Execution

Choose your learning style10 modes available
Process Flow - Migrating from Realtime Database to Firestore
Start: Existing Realtime Database
↓
Export Data from Realtime Database
↓
Transform Data Format
↓
Import Data into Firestore
↓
Update App Code to Use Firestore SDK
↓
Test and Verify Data Integrity
↓
Switch App to Firestore Fully
↓
End
This flow shows the main steps to move data and app logic from Realtime Database to Firestore.
Execution Sample
Firebase
1. Export data from Realtime Database
2. Convert JSON structure to Firestore format
3. Import data into Firestore
4. Update app code to Firestore SDK
5. Test app with Firestore
Step-by-step process to migrate data and update app code from Realtime Database to Firestore.
Process Table
StepActionInput/StateOutput/State Change
1Export dataRealtime Database with nested JSONJSON file with exported data
2Transform dataExported JSONData formatted for Firestore collections and documents
3Import dataFormatted dataData loaded into Firestore with collections and documents
4Update app codeApp using Realtime Database SDKApp uses Firestore SDK calls
5Test appApp connected to FirestoreVerified data integrity and app functionality
6Switch app fullyApp ready with FirestoreApp runs fully on Firestore, Realtime Database deprecated
💡 Migration complete when app fully uses Firestore and data is verified.
Status Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4Final
Data FormatRealtime DB JSONExported JSON fileFirestore JSON formatFirestore collections/documentsApp code with Firestore SDKApp running on Firestore
Key Moments - 3 Insights
Why do we need to transform the data format after exporting from Realtime Database?
Because Realtime Database uses a nested JSON tree, but Firestore uses collections and documents, so the data structure must be changed to fit Firestore's model (see execution_table step 2).
What happens if the app code is not updated to use Firestore SDK after importing data?
The app will still try to access Realtime Database and fail to read the new Firestore data, causing errors (see execution_table step 4).
How do we know the migration is successful?
When the app runs fully on Firestore, data is correct, and no errors occur during testing (see execution_table step 5 and 6).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the output after Step 3?
AApp code updated to Firestore SDK
BExported JSON file
CData loaded into Firestore with collections and documents
DVerified data integrity
💡 Hint
Check the 'Output/State Change' column for Step 3 in execution_table
At which step does the app code switch to using Firestore SDK?
AStep 2
BStep 4
CStep 5
DStep 6
💡 Hint
Look at the 'Action' column in execution_table for when app code is updated
If the data is not transformed properly, what will likely happen?
AData import into Firestore will fail or be incorrect
BRealtime Database will auto-convert data
CApp will run faster
DNo effect on migration
💡 Hint
Refer to key_moments about data format transformation and execution_table step 2
Concept Snapshot
Migrating from Realtime Database to Firestore:
1. Export data from Realtime Database as JSON.
2. Transform data to Firestore's collections/documents format.
3. Import transformed data into Firestore.
4. Update app code to use Firestore SDK.
5. Test app and switch fully to Firestore.
Full Transcript
To migrate from Realtime Database to Firestore, first export your data as JSON. Then, transform this data to fit Firestore's collections and documents structure. Next, import the transformed data into Firestore. Update your app code to use Firestore SDK instead of Realtime Database SDK. Finally, test your app to ensure data integrity and switch fully to Firestore once verified.

Practice

(1/5)
1. What is the main difference between Firebase Realtime Database and Firestore when migrating data?
easy
A. Realtime Database requires manual backups, Firestore automatically backs up data.
B. Realtime Database uses SQL queries, Firestore uses NoSQL queries.
C. Realtime Database stores data as one large JSON tree, Firestore stores data in documents and collections.
D. Realtime Database supports offline mode, Firestore does not.

Solution

  1. Step 1: Understand data structure differences

    Realtime Database organizes data as a single JSON tree, making it less flexible for complex queries.
  2. Step 2: Recognize Firestore's document model

    Firestore stores data in documents grouped into collections, allowing more structured and scalable data management.
  3. Final Answer:

    Realtime Database stores data as one large JSON tree, Firestore stores data in documents and collections. -> Option C
  4. Quick Check:

    Data structure difference = Realtime Database stores data as one large JSON tree, Firestore stores data in documents and collections. [OK]
Hint: Remember: JSON tree vs documents/collections [OK]
Common Mistakes:
  • Confusing query languages between databases
  • Assuming Firestore lacks offline support
  • Thinking backups are automatic in Realtime Database
2. Which of the following is the correct Firebase CLI command to export data from Realtime Database before migration?
easy
A. firebase database:get / > ./backup.json
B. firebase firestore:export ./backup
C. firebase database:backup ./backup.json
D. firebase export realtime ./backup.json

Solution

  1. Step 1: Identify the correct CLI command for Realtime Database export

    The Firebase CLI uses firebase database:get / > ./backup.json to export Realtime Database data.
  2. Step 2: Confirm the syntax

    The command outputs JSON to stdout, which is redirected to ./backup.json.
  3. Final Answer:

    firebase database:get / > ./backup.json -> Option A
  4. Quick Check:

    Export command syntax = firebase database:get / > ./backup.json [OK]
Hint: Export Realtime DB with 'database:get / > ./backup.json' command [OK]
Common Mistakes:
  • Using firestore export command for Realtime Database
  • Incorrect command syntax
  • Confusing backup and export commands
3. Given this snippet migrating data from Realtime Database JSON to Firestore documents, what will be the Firestore document ID for user 'user123'?
const userData = {
  "user123": {"name": "Alice", "age": 30},
  "user456": {"name": "Bob", "age": 25}
};

for (const userId in userData) {
  firestore.collection('users').doc(userId).set(userData[userId]);
}
medium
A. The user's name, e.g., "Alice"
B. A random auto-generated ID
C. "users"
D. "user123"

Solution

  1. Step 1: Analyze the loop and document ID assignment

    The loop uses doc(userId), so the document ID is set explicitly to the key, e.g., "user123".
  2. Step 2: Confirm document ID is not auto-generated

    Since doc(userId) is used, Firestore will not auto-generate an ID.
  3. Final Answer:

    "user123" -> Option D
  4. Quick Check:

    Document ID = userId key = "user123" [OK]
Hint: doc(userId) sets document ID explicitly [OK]
Common Mistakes:
  • Assuming Firestore auto-generates IDs always
  • Confusing collection name with document ID
  • Using user name as ID mistakenly
4. You tried migrating data using a script but Firestore documents are empty after migration. What is the most likely cause?
medium
A. You used the wrong collection name in Firestore.
B. You forgot to await the asynchronous set() calls in the migration script.
C. You exported data from Firestore instead of Realtime Database.
D. You did not enable Firestore in the Firebase console.

Solution

  1. Step 1: Understand asynchronous Firestore writes

    Firestore's set() method returns a promise that must be awaited to complete the write.
  2. Step 2: Identify missing await causes empty documents

    If set() is not awaited, the script may finish before writes complete, resulting in empty documents.
  3. Final Answer:

    You forgot to await the asynchronous set() calls in the migration script. -> Option B
  4. Quick Check:

    Await async writes = You forgot to await the asynchronous set() calls in the migration script. [OK]
Hint: Always await Firestore writes in migration scripts [OK]
Common Mistakes:
  • Ignoring async nature of Firestore writes
  • Assuming collection name mismatch causes empty docs
  • Confusing export source databases
5. You want to migrate nested Realtime Database data with users and their posts to Firestore. Which approach best preserves the data structure and supports efficient queries?
hard
A. Store users as documents in 'users' collection and posts as subcollections under each user document.
B. Flatten all data into a single collection with combined user-post IDs as document IDs.
C. Store all data in one large Firestore document per user including all posts as nested arrays.
D. Migrate posts to a separate collection without linking to users.

Solution

  1. Step 1: Understand Firestore data modeling best practices

    Firestore supports subcollections to model one-to-many relationships efficiently.
  2. Step 2: Choose structure preserving hierarchy and query efficiency

    Storing posts as subcollections under user documents keeps data organized and allows targeted queries.
  3. Final Answer:

    Store users as documents in 'users' collection and posts as subcollections under each user document. -> Option A
  4. Quick Check:

    Use subcollections for nested data = Store users as documents in 'users' collection and posts as subcollections under each user document. [OK]
Hint: Use subcollections for nested related data in Firestore [OK]
Common Mistakes:
  • Putting all data in one large document causing size limits
  • Flattening data losing natural hierarchy
  • Separating posts without user linkage
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