2017-10-04 4 views
14

firebase 실시간 데이터베이스를 사용하는 내 apps 데이터베이스를 새로운 Cloud Firestore 데이터베이스로 마이그레이션하는 가장 좋은 방법을 찾고 있습니다. 저는 현재 작업중인 프로젝트에 대해 데이터 스키마 변경을 할 필요가 없다고 확신합니다. 따라서 1-1지도를 작성하려고합니다. Firebase는 자신의 사이트에서이 작업을 수행하는 스크립트를 작성하라고 제안했지만, 최선의 방법은 확실하지 않습니다. 이미이 작업을 수행하는 스크립트를 만든 사람이 있습니까?Firebase Realtime Database를 Firestore로 마이그레이션

+0

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

+0

네, 대한 스크립트를 만들었지 만했다 그들은 기본적으로 스크립트 작성을 제안하지만,이 질문은 요구하지 않습니다. – Luke

+0

각 개인의 특정 유스 케이스와 요구 사항에 따라 커스텀 일 가능성이 높기 때문에 일반적인 스크립트는 아직 준비되지 않았을 것입니다. –

답변

5

나는 빠르고 더러운 방법으로 물건을 옮긴 작은 노드 스크립트를 작성했으며 아주 잘 작동했다.

관심있는 사람이 아래에 있습니다.

참고 : 실행하려면 경우 FireStore에 평면뿐만 아니라

을 데이터를 유지하는 실시간 데이터베이스의 데이터 모델이 완전히 평평하고 많은 중첩 된 데이터를 가지고 있지 않은 경우에만 사용해야합니다, 당신은 의도 이 스크립트는 index.js라는 노드 파일을 작성하고 실시간 데이터베이스 내보내기에서 서비스 계정 파일 및 원시 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

예 1) firebase 프로젝트를 구성한 다음 2) TS 파일 에 추가합니다. 'AngularFirestore, AngularFirestoreCollection'에서 'anglefire2/firestore'를 가져옵니다. 'anglefire2/database'에서 {AngularFireDatabase}를 가져 오십시오. 생성자 (개인 afs : AngularFirestore, 개인 모퉁이 불꽃 : AngularFireDatabase) {} convert() { this.itemsCollection = this.afs.collection ('requests'); // ref() this.angularfire.list ('/ 요청 /). 감사 추적(). subscribe ((data : any) => { _each (data, element => { this.itemsCollection.doc (element.key) .set (element.payload.val)) .then ((result) => {});});});} –

관련 문제