Перенос базы данных Firebase Realtime в Firestore

Я ищу лучший способ миграции моей базы данных приложений, которая использует базу данных реального времени firebase в новой базе данных Cloud Firestore. Я уверен в проекте, над которым я работаю, мне не нужно изменять какие-либо схемы данных, поэтому я просто пытаюсь сделать это 1-1. Firebase предложила на своем сайте просто написать script, чтобы сделать это, но я не уверен в лучшем способе этого. Кто-нибудь уже сделал script, который это выполнил?

Ответы

Ответ 1

Я написал немного node script, которые быстро и грязно перенесли вещи, и это сработало довольно хорошо.

Это ниже, если кому-то интересен.

Примечание. Это следует использовать только в том случае, если ваша модель данных в базе данных реального времени была полностью плоской и у нее не было много вложенных данных, и вы намерены также сохранять свои данные в Firestore

Чтобы запустить этот script, просто создайте файл node с именем index.js и выбросьте его в каталог вместе с файлом учетной записи службы и сырым json файлом из базы данных в реальном времени и выполните следующее из командной строки.

$ node index.js

Script ниже.

const admin = require('firebase-admin');

var serviceAccount = require("./config.json");
var database = require("./database.json");
var async = require ('async');

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount)
});

var db = admin.firestore();

var allEntityNames = Object.keys(database);

var asyncTasks = [];

for (var i in allEntityNames) {
  var entityName = allEntityNames[i];
  var entity = database[entityName];
  var entityKeys = Object.keys(entity);

  console.log("began migrating "+ entityName);
  for (var j in entityKeys) {
    var entityKey = entityKeys[j];
    var dict = entity[entityKey];
    asyncTasks.push(function(callback){
      db.collection(entityName).doc(entityKey).set(dict)
        .then(function() {
          callback();
        })
        .catch(function(error) {
          console.log(error);
          callback();
        });
    });
  }
  async.parallel(asyncTasks, function(){
    console.log("Finished migrating "+ entityName);
  });
}

Ответ 2

Привет, я создал script для того же

import { AngularFirestore, AngularFirestoreCollection } from 'angularfire2/firestore'; 
import { AngularFireDatabase } from 'angularfire2/database';
constructor( private afs: AngularFirestore, private angularfire: AngularFireDatabase ) {}
convert() { 
this.itemsCollection = this.afs.collection('requests');//ref() 
this.angularfire.list('/requests/').auditTrail().subscribe((data: any) => { 
_.each(data, element =>{
this.itemsCollection.doc(element.key).set(element.payload.val()) .then((result) => { }); }); });}