2017-10-04 17 views
14

Firebaseリアルタイムデータベースを使用しているアプリケーションデータベースを新しいCloud Firestoreデータベースに移行する最適な方法を探しています。私が作業しているプロジェクトについては確信しています。私はデータスキーマの変更を行う必要はないので、私はそれをマップするだけです。 Firebaseは自分のサイトでこれを行うためのスクリプトを書くことを提案していますが、私はそれについて最善の方法を知りません。誰でもすでにこれを達成するスクリプトを作っていますか?Firebase Realtime DatabaseをFirestoreに移行

+0

https://firebase.google.com/docs/firestore/firestore-for-rtdb –

+0

うん、そのリンクを認識するためにスクリプトを作成しますが、しています彼らは基本的にちょうどスクリプトを書くことを示唆していますが、それはこの質問が求めているものではありません。 – Luke

+0

これは一般的なスクリプトを持っている人はいないでしょう。なぜなら、各人の特定のユースケースや要件には慣れ親しんだからです。 –

答えて

5

私は、すばやく汚い方法で物事を移行し、それは非常にうまくいった小さなノードスクリプトを書いた。

他の誰かが興味を持っているのは以下のとおりです。

注:実行するにはFirestoreでフラットにも

をあなたのデータを維持する上で、リアルタイムデータベース内のデータモデルは、完全に平らだったと多くのネストされたデータを持っていなかった場合にのみ使用してください、あなたが意図しこのスクリプトはindex.jsというノードファイルを作成し、サービスデータベースファイルとraw jsonファイルとともにディレクトリにスローし、リアルタイムデータベースからエクスポートし、コマンドラインから以下を実行します。

$ node index.js 

下記のスクリプト実装。

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); 
    }); 
} 
-1

こんにちは、私は同じ

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) => { }); }); });} 
+0

これを実行する手順を追加できますか? – Luke

+0

yes 1)firebaseプロジェクトを設定してから 2)TSファイル に追加します。 'AngularFirestore、AngularFirestoreCollection}は' angularfire2/firestore 'からインポートします。 'AngularFireDatabase}を' angularfire2/database 'からインポートします。 コンストラクタ(private afs:AngularFirestore、private anglefire:AngularFireDatabase){} convert(){ this.itemsCollection = this.afs.collection( 'requests'); // ref() this.angularfire.list( '/ { } .each(data、element => { this.itemsCollection.doc(element.key).set(element.payload.val()は、 ));});});});});}) –

関連する問題