2017-10-04 26 views
14

Tôi đang tìm cách tốt nhất để di chuyển cơ sở dữ liệu ứng dụng đang sử dụng cơ sở dữ liệu thời gian thực firebase cho cơ sở dữ liệu Cloud Firestore mới. Tôi tự tin cho dự án tôi đang làm việc trên tôi không cần phải thực hiện bất kỳ thay đổi lược đồ dữ liệu, vì vậy tôi khá nhiều chỉ cố gắng 1-1 bản đồ nó. Firebase đã đề xuất trên trang web của họ chỉ để viết một kịch bản để làm điều này, nhưng tôi không chắc chắn về cách tốt nhất để đi về điều đó. Có ai đã thực hiện một kịch bản hoàn thành điều này?Di chuyển cơ sở dữ liệu thời gian thực Firebase thành Firestore

+0

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

+0

vâng, biết liên kết đó, nhưng về cơ bản họ chỉ đề nghị viết một kịch bản, nhưng đó không phải là câu hỏi mà câu hỏi này đặt ra. – Luke

+0

Không ai có thể có một kịch bản chung cho điều này vì nó có thể sẽ được tùy chỉnh theo từng trường hợp sử dụng và yêu cầu cụ thể của từng người. –

Trả lời

5

Tôi đã viết lên một tập lệnh nút nhỏ để di chuyển mọi thứ một cách nhanh chóng và dơ bẩn và nó hoạt động khá độc đáo.

Nó ở bên dưới nếu có ai quan tâm.

Lưu ý: Đây chỉ nên được sử dụng nếu mô hình dữ liệu của bạn trong cơ sở dữ liệu thời gian thực là hoàn toàn bằng phẳng và không có nhiều dữ liệu lồng nhau, và bạn có ý định vào việc giữ dữ liệu của bạn bằng phẳng cũng như trong FireStore

Để chạy tập lệnh này chỉ tạo một tệp nút gọi là index.js và ném nó vào thư mục cùng với tệp tài khoản dịch vụ và tệp json thô của bạn từ xuất cơ sở dữ liệu thời gian thực và chạy sau từ dòng lệnh.

$ node index.js 

Thực hiện tập lệnh bên dưới.

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

Hi tôi đã tạo ra một kịch bản cho cùng một

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

bạn có thể thêm các bước để chạy ứng dụng này không? – Luke

+0

yes 1) định cấu hình dự án firebase của bạn và sau đó 2) Thêm tệp TS nhập {AngularFirestore, AngularFirestoreCollection} từ 'angularfire2/firestore'; nhập {AngularFireDatabase} từ 'angularfire2/database'; hàm tạo (private afs: AngularFirestore, angularfire private: AngularFireDatabase) {} chuyển đổi() { this.itemsCollection = this.afs.collection ('requests'); // ref() this.angularfire.list ('/ yêu cầu/') .Đăng ký ((dữ liệu: bất kỳ) => { _.each (dữ liệu, phần tử => { this.itemsCollection.doc (element.key) .set (element.payload.val ()) .then ((kết quả) => {});});});} –

Các vấn đề liên quan