* Обновление: я написал пакет NPM, который поможет вам создавать резервные копии и восстанавливать данные firestore. Вы можете попробовать, если хотите. Это также может помочь в резервном копировании подколлекции;)
* Обновление: спасибо за информацию Эндрю С.. Firebase просто обновляет функцию импорта и экспорта. Вы можете прочитать это здесь: https://firebase.google.com/docs/firestore/manage-data/export-import
Однако вы все равно можете использовать этот пакет, если хотите :)
Предварительные требования
Вам нужен NODE или что-то, что может запускать файл JAVASCRIPT (JS).
Получите файл serviceAccount JSON из Настройки проекта ›УЧЕТНЫЕ ЗАПИСИ ОБСЛУЖИВАНИЯ в консоли Firebase.
Измените databaseURL при инициализации приложения своим собственным
Экспорт данных JSON из Firestore
Этот скрипт сохранит одну коллекцию из Firestore и сохранит ее как firestore-export.json.
Вы можете назвать этот скрипт export.js и запустить его с этим
node export.js <your-collection-name>
Не забудьте установить пакеты NPM перед запуском скрипта
var admin = require("firebase-admin"); var fs = require('fs'); var serviceAccount = require("./serviceAccountKey.json"); var collectionName = process.argv[2]; // You should replae databaseURL with your own admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL: "https://<your-project-name>.firebaseio.com" }); var db = admin.firestore(); var data = {}; data[collectionName] = {}; var results = db.collection(collectionName) .get() .then(snapshot => { snapshot.forEach(doc => { data[collectionName][doc.id] = doc.data(); }) return data; }) .catch(error => { console.log(error); }) results.then(dt => { // Write collection to JSON file fs.writeFile("firestore-export.json", JSON.stringify(dt), function(err) { if(err) { return console.log(err); } console.log("The file was saved!"); }); })
Импортировать данные JSON в Firestore
Это поможет импортировать одну коллекцию в ваш Firestore. Это пример файла JSON, который я буду использовать для импорта
{ "test" : { "first-key" : { "email" : "[email protected]", "website" : "dalenguyen.me", "custom" : { "firstName" : "Dale", "lastName" : "Nguyen" } }, "second-key" : { "email" : "[email protected]", "website" : "google.com", "custom" : { "firstName" : "Harry", "lastName" : "Potter" } } } }
Сценарий будет импортировать с «test» в качестве имени коллекции и «first-key» + «second-key» в качестве документа.
Вы используете эту команду для импорта в Firestore
node import.js import-to-firestore.json
Имя сценария - import.js, а образец файла JSON - import-to-firestore.json.
var admin = require("firebase-admin"); var fs = require('fs'); var serviceAccount = require("./serviceAccountKey.json"); var fileName = process.argv[2]; // You should replae databaseURL with your own admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL: "https://<your-project-name>.firebaseio.com" }); var db = admin.firestore(); var collectionName = ''; fs.readFile(fileName, 'utf8', function(err, data){ if(err){ return console.log(err); } // Turn string from file to an Array dataArray = JSON.parse(data); for(var index in dataArray){ collectionName = index; for(var doc in dataArray[index]){ if(dataArray[index].hasOwnProperty(doc)){ db.collection(collectionName).doc(doc) .set(dataArray[index][doc]) .then(() => { console.log('Document is successed adding to firestore!'); }) .catch(error => { console.log(error); }); } } } })
Если вы хотите взглянуть на репозиторий, взгляните на мою учетную запись Github: https://github.com/dalenguyen/firestore-import-export