我正在寻找将使用 Firebase 实时数据库的应用程序数据库迁移到新的 Cloud Firestore 数据库的最佳方法。我对我正在从事的项目充满信心,我不需要进行任何数据模式更改,所以我几乎只是尝试 1-1 映射它。 Firebase 在他们的网站上建议只需编写一个脚本来执行此操作,但我不确定最好的方法。有人已经制作了一个脚本来完成这个任务吗?
最佳答案
我编写了一个小节点脚本,它以一种快速而肮脏的方式迁移内容,并且效果非常好。
如果其他人有兴趣,请在下面。
注意:仅当您的实时数据库中的数据模型完全平坦且没有太多嵌套数据,并且您打算在 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);
});
}
关于firebase - 将 Firebase 实时数据库迁移到 Firestore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46572567/