Migration de la base de données Firebase en temps réel vers Firestore

je cherche la meilleure façon de migrer ma base de données apps qui utilise la base de données en temps réel de firebase vers la nouvelle base de données Cloud Firestore. Je suis confiant pour le projet sur lequel je travaille, je n'ai pas besoin de faire des changements de schéma de données, donc je suis à peu près juste essayer de le mapper 1-1. Firebase a suggéré sur leur site de simplement écrire un script pour le faire, mais je ne suis pas sûr de la meilleure façon de procéder. Quelqu'un a déjà fait un script qui réalise cela?

17
demandé sur Dan McGrath 2017-10-04 22:18:28

2 réponses

j'ai écrit un petit script de noeud qui a migré les choses d'une manière rapide et sale et il a fonctionné assez bien.

C'est ci-dessous si quelqu'un d'autre est intéressé.

Note: Ceci ne doit être utilisé que si votre modèle de données dans la base de données en temps réel était complètement plat et n'avait pas beaucoup de données imbriquées, et vous avez l'intention de garder vos données à plat aussi bien dans Firestore

pour exécuter ce script, il suffit de créer un fichier de noeuds appelé index.js et de le jeter dans un répertoire avec votre compte de service fichier et le fichier JSON brut de la base de données en temps réel exporter et exécuter ce qui suit à partir de ligne de commande.

$ node index.js

Script de mise en œuvre ci-dessous.

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);
  });
}
7
répondu Luke 2017-10-12 06:58:25

Salut j'ai créé un script pour le même

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) => { }); }); });}
-1
répondu Jassi Walia 2017-12-06 07:20:58