* Обновление: я написал пакет NPM, который поможет вам создавать резервные копии и восстанавливать данные firestore. Вы можете попробовать, если хотите. Это также может помочь в резервном копировании подколлекции;)



firestore-export-import
NPM-пакет для резервного копирования и восстановления Firebase Firestore www.npmjs.com



* Обновление: спасибо за информацию Эндрю С.. 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