Я ищу лучший способ миграции моей базы данных приложений, которая использует базу данных реального времени firebase в новой базе данных Cloud Firestore. Я уверен в проекте, над которым я работаю, мне не нужно изменять какие-либо схемы данных, поэтому я просто пытаюсь сделать это 1-1. Firebase предложила на своем сайте просто написать script, чтобы сделать это, но я не уверен в лучшем способе этого. Кто-нибудь уже сделал script, который это выполнил?
Перенос базы данных Firebase Realtime в Firestore
Ответ 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) => { }); }); });}