如何将所有Firestore文档从导出导入到特定集合

时间:2020-08-09 18:48:49

标签: firebase google-cloud-platform google-cloud-firestore

因此,我希望能够像创建“开发”集合一样创建数据库的快照。

我可以使用此处https://firebase.google.com/docs/firestore/manage-data/export-import#export_data的教程导出当前在Firestore上的所有数据。

Firebase仅显示如何从存储导出的文件 中导入特定集合。

如何将导出导入到Firestore中的特定“开发”集合?

例如:

Cloud Firestore数据库集合(第1天)

  • 用户(从第1天开始)
    • 为每个用户都有一个文档
  • 任务(从第1天开始)
    • 每个任务都有一个文档
  • 聊天(从第1天开始)
    • 每个聊天都有一个文档

-> 将所有这些数据导出到Google Cloud Platform存储桶 -> 将所有导出的数据导入“开发”集合

Cloud Firestore数据库集合(第2天)

  • 用户(从第2天开始)
  • 任务(从第2天开始)
  • 聊天(从第2天开始)
  • 发展
    • 用户(从第1天开始)
    • 任务(从第1天开始)
    • 聊天(从第1天开始)

然后我可以将此开发集合用作测试的数据库快照,然后其他集合可以照常用于生产中。

2 个答案:

答案 0 :(得分:1)

Cloud SDK中没有此类功能(使用gcloud firestore),但是很容易通过编程方式完成。有两句话:

  1. 集合必须在文档中,因此构造集合“用户” 在集合“发展”是不可能的。但是它有可能 在集合“开发”中的文档“开发”中执行“用户” (/开发/开发/用户等)
  2. 如果您拥有大量存储空间,这将花费您读写Firestore的费用 数据库可能会花费时间和金钱。所以要小心。

如果您对上面的方法没问题,那就很简单。这是一个执行此操作的示例,用于记录JS(quickstart)集合“ devCol”中的“ devDoc”:

const admin = require('firebase-admin');

admin.initializeApp();
const db = admin.firestore();

devRefsegments = ["devCol","devDoc"];

db.listCollections().then(colList => {
    colList.forEach(colRef => 
        colRef.get().then(colSnap => {
            colSnap.forEach(prop => {
                var path = makepath(devRefsegments,prop._ref._path.segments);
                db.doc(path).set( prop.data()).then(r => console.log(r));
            });
        })
    );
});


function makepath(devRefsegments, segments) {
    return "/"+devRefsegments.join("/")+"/"+segments.join("/");
}

我正在GCP Cloud Shell中运行它,但是,如果需要,您可以轻松地使它具有云功能。当然,您也可以使用其他语言。我建议尝试使用小型数据库,以避免启动时产生成本。

答案 1 :(得分:0)

我有相同的任务要做。我看了很多文章。但是我正在向您解释完成此任务的最简单方法。

假设您在项目db_to_be_export_project中有一个数据库db_to_be_export,并且您想将此数据库的数据导入另一个项目的数据库db_to_be_import_project。数据库名称为db_to_be_import。

需要遵循的步骤

  1. 下载两个项目的私有文件。您可以按照以下说明下载文件。 转到Firebase控制台>项目概述>项目设置>服务帐户>生成新的私钥
  2. 重命名两个文件。将要从中导出数据的文件名设置为“ Export.json”,将“ Import.json”设置为要导入数据的文件。
  3. 将两个文件都移到一个文件夹中。
  4. 在Mac机的情况下打开终端。移至两个json文件都存在的目录。
  5. Now run this command "npx -p node-firestore-import-export firestore-export -a Export.json -b backup.json"
    
  6. Now run this last command "npx -p node-firestore-import-export firestore-import -a Import.json -b backup.json"
    

现在在firestore控制台中打开数据库“ db_to_be_import”,现在可以看到数据库“ db_to_be_export”中的完整数据。