data - Migrar la base de datos en tiempo real de Firebase a Firestore
firestore get document id (2)
Escribí un pequeño script de nodo que migraba las cosas de una manera rápida y sucia y funcionó bastante bien.
Está abajo si alguien más está interesado.
Nota: esto solo debe usarse si su modelo de datos en la base de datos en tiempo real era completamente plano y no tenía muchos datos anidados, y tiene la intención de mantener sus datos planos también en Firestore
Para ejecutar este script, simplemente cree un archivo de nodo denominado index.js y colóquelo en un directorio junto con su archivo de cuenta de servicio y el archivo json en bruto de la base de datos en tiempo real de exportación y ejecute lo siguiente desde la línea de comandos.
$ node index.js
Implementación de script a continuación.
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);
});
}
Estoy buscando la mejor manera de migrar la base de datos de mis aplicaciones, que está utilizando la base de datos en tiempo real de firebase a la nueva base de datos de Cloud Firestore. Confío en el proyecto en el que estoy trabajando, no necesito hacer ningún cambio en el esquema de datos, por lo que estoy intentando mapearlo 1-1. Firebase ha sugerido en su sitio simplemente escribir un script para hacer esto, pero no estoy seguro de cuál es la mejor manera de hacerlo. ¿Alguien ya ha hecho un guión que logra esto?
Hola he creado un script para el mismo
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) => { }); }); });}