Skip to content

Instantly share code, notes, and snippets.

@danielkellyio
Created April 20, 2021 13:26
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danielkellyio/5aaa60d5a5a265ece55ab69f2a6bfc5f to your computer and use it in GitHub Desktop.
Save danielkellyio/5aaa60d5a5a265ece55ab69f2a6bfc5f to your computer and use it in GitHub Desktop.
// Imports
const firestoreService = require('firestore-export-import')
const firebaseConfig = require('./src/config/firebase.js')
const serviceAccount = require('./serviceAccount.json')
const fs = require('fs')
const tempFileName = `${__dirname}/data-temp.json`;
// procedure
(async () => {
const fileContents = fs.readFileSync(`${__dirname}/src/data.json`, 'utf8')
const data = JSON.parse(fileContents)
const transformed = transformDataForFirestore(data)
fs.writeFileSync(tempFileName, JSON.stringify(transformed))
await jsonToFirestore()
fs.unlinkSync(tempFileName)
})()
// Helper Functions
// -------------------------------------
// JSON To Firestore
async function jsonToFirestore () {
try {
console.log('Initialzing Firebase')
await firestoreService.initializeApp(serviceAccount, firebaseConfig.databaseURL)
console.log('Firebase Initialized')
await firestoreService.restore(tempFileName)
console.log('Upload Success')
} catch (error) {
console.log(error)
}
}
// In order to preserve ids in data.json
// as ids in firestore
// must use keyed object (id being the key) instead of array of records
function transformDataForFirestore (data) {
const collections = data
delete collections.stats
const collectionsById = {}
Object.keys(collections).forEach((collectionKey) => {
collectionsById[collectionKey] = {}
const collection = collections[collectionKey]
collection.forEach((record) => {
collectionsById[collectionKey][record.id] = record
delete collectionsById[collectionKey][record.id].id
})
})
return collectionsById
}
@yandrey1185
Copy link

yandrey1185 commented Nov 16, 2023

For recently uploads:

  1. Delete line 3 <====> const firebaseConfig = require('./src/config/firebase.js')

  2. Change line 25 <====> await firestoreService.initializeApp(serviceAccount, firebaseConfig.databaseURL)
    to <====> const firestore = await firestoreService.initializeFirebaseApp(serviceAccount)

  3. Change line 28 <====> await firestoreService.restore(tempFileName))
    to <====> await firestoreService.restore(firestore, tempFileName)

@HORKimhab
Copy link

// Imports
const firestoreService = require("firestore-export-import");
const serviceAccount = require("./serviceAccount.json");
const fs = require("fs");
const tempFileName = ${__dirname}/data-temp.json;

// procedure
(async () => {
const fileContents = fs.readFileSync(${__dirname}/src/data.json, "utf8");
const data = JSON.parse(fileContents);
const transformed = transformDataForFirestore(data);
fs.writeFileSync(tempFileName, JSON.stringify(transformed));
await jsonToFirestore();
fs.unlinkSync(tempFileName);
})();

// Helper Functions
// -------------------------------------

// JSON To Firestore
async function jsonToFirestore() {
try {
console.log("Initialzing Firebase");
const firestore = await firestoreService.initializeFirebaseApp(
serviceAccount
);
console.log("Firebase Initialized");

// await firestoreService.restore(tempFileName);
await firestoreService.restore(firestore, tempFileName);
console.log("Upload Success");

} catch (error) {
console.log(error);
}
}

// In order to preserve ids in data.json
// as ids in firestore
// must use keyed object (id being the key) instead of array of records
function transformDataForFirestore(data) {
const collections = data;
delete collections.stats;
const collectionsById = {};
Object.keys(collections).forEach((collectionKey) => {
collectionsById[collectionKey] = {};
const collection = collections[collectionKey];
collection.forEach((record) => {
collectionsById[collectionKey][record.id] = record;
delete collectionsById[collectionKey][record.id].id;
});
});
return collectionsById;
}

@HORKimhab
Copy link

// Imports const firestoreService = require("firestore-export-import"); const serviceAccount = require("./serviceAccount.json"); const fs = require("fs"); const tempFileName = ${__dirname}/data-temp.json;

// procedure (async () => { const fileContents = fs.readFileSync(${__dirname}/src/data.json, "utf8"); const data = JSON.parse(fileContents); const transformed = transformDataForFirestore(data); fs.writeFileSync(tempFileName, JSON.stringify(transformed)); await jsonToFirestore(); fs.unlinkSync(tempFileName); })();

// Helper Functions // -------------------------------------

// JSON To Firestore async function jsonToFirestore() { try { console.log("Initialzing Firebase"); const firestore = await firestoreService.initializeFirebaseApp( serviceAccount ); console.log("Firebase Initialized");

// await firestoreService.restore(tempFileName);
await firestoreService.restore(firestore, tempFileName);
console.log("Upload Success");

} catch (error) { console.log(error); } }

// In order to preserve ids in data.json // as ids in firestore // must use keyed object (id being the key) instead of array of records function transformDataForFirestore(data) { const collections = data; delete collections.stats; const collectionsById = {}; Object.keys(collections).forEach((collectionKey) => { collectionsById[collectionKey] = {}; const collection = collections[collectionKey]; collection.forEach((record) => { collectionsById[collectionKey][record.id] = record; delete collectionsById[collectionKey][record.id].id; }); }); return collectionsById; }

This works...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment