firebase - 将 Firebase 实时数据库迁移到 Firestore

标签 firebase firebase-realtime-database google-cloud-firestore

我正在寻找将使用 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/

相关文章:

node.js - Firebase Firestore Increment FieldValue 不增加

android - 为什么我不能使用模型类在数据库中设置特定子项的值?

ios - 如何在 Firebase 中获取数据?

javascript - Firebase函数在数据完全获取之前返回

java - 调用setEnabled(false)后按钮仍然可以再按一次

ios - swift 3.0,火力地堡 : How to get last added record

android - Firebase - 未找到 GetTokenResult、getExpirationTimestamp()

android - flutter : how i get data from firestore in List<String>?

android - 如何在特定时间后(例如 10 分钟后)更新 firebase 数据库中的值?

firebase - Cloud Firestore 不断重新下载文档 - Flutter