Last active
August 12, 2021 14:35
-
-
Save brunobraga95/82bef0672ce451767107e62df1d8b28f to your computer and use it in GitHub Desktop.
Copy firestore database
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const firebase = require('firebase-admin'); | |
var serviceAccountSource = require("./source.json"); // source DB key | |
var serviceAccountDestination = require("./destination.json"); // destiny DB key | |
const sourceAdmin = firebase.initializeApp({ | |
credential: firebase.credential.cert(serviceAccountSource) | |
}); | |
const destinyAdmin = firebase.initializeApp({ | |
credential: firebase.credential.cert(serviceAccountDestination) | |
}, "destination"); | |
/* this schema is how your DB is organized in a tree structure. You don't have to care about the Documents | |
but you do need to inform the name of your collections and any subcollections, in this | |
case we have two collections called users and groups, the all have their documents, but | |
the collection users has its own subcollections, friends and groups, which again have their | |
own subcollection, messages. | |
*/ | |
const schema = { | |
users: { | |
friends: { | |
messages: {}, | |
}, | |
groups: { | |
messages: {}, | |
}, | |
}, | |
groups: {}, | |
}; | |
var source = sourceAdmin.firestore(); | |
var destination = destinationAdmin.firestore(); | |
const copy = (sourceDBrep, destinationDBref, aux) => { | |
return Promise.all(Object.keys(aux).map((collection) => { | |
return sourceDBrep.collection(collection).get() | |
.then((data) => { | |
let promises = []; | |
data.forEach((doc) => { | |
const data = doc.data(); | |
promises.push( | |
destinationDBref.collection(collection).doc(doc.id).set(data).then((data) => { | |
return copy(sourceDBrep.collection(collection).doc(doc.id), | |
destinationDBref.collection(collection).doc(doc.id), | |
aux[collection]) | |
}) | |
); | |
}) | |
return Promise.all(promises); | |
}) | |
})); | |
}; | |
copy(source, destination, aux).then(() => { | |
console.log('copied'); | |
}); | |
+1 to @boon4376 from me too
Amazing thanks 🙏🙌
this was working great and has recently stopped. is anyone still able to run it? Any known changes that could have caused issues?
change the source code at line 33
from
var destination = destinationAdmin.firestore();
to
var destination = destinyAdmin .firestore();
change line 20
from
const schema = {
to
const aux = {
trying for big data, halt on 5347 record
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
running on 8gb Ram server, 16 core processor
using node 12
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
+1 to @boon4376