从Firestore导出所有集合和子集合

时间:2020-11-05 15:00:30

标签: firebase google-cloud-firestore

我已经从Firebase中尝试了export data来“备份”我的数据库,但令我惊讶的是,尽管它们被唯一地命名,但它没有导出子集合。有没有办法导出整个数据库

我知道有NPM个软件包可以做到这一点,但是它并不能导出为GCP导出的二进制格式,从而更节省空间。

编辑:

我尝试通过scheduled cloud functionGCP console导出数据。我完全按照说明进行了操作,没​​有做任何更改。

他们都上传了一个文件夹,其中包含以下图片中的内容。

根目录: enter image description here

all_namespaces/all_kinds

enter image description here

我通过GCP控制台导入了 2020-11-05T14:40:04_75653.overall_export_metadata,并确保足够多的顶级集合和文档都回来了,但是所有子集合都没有。我希望所有集合和子集合都将从导入中恢复。

因此总而言之,我尝试通过两种方法导出数据并通过一种方法上传。

这是预定的云功能:

const functions = require('firebase-functions');
const firestore = require('@google-cloud/firestore');
const client = new firestore.v1.FirestoreAdminClient();

// Replace BUCKET_NAME
const bucket = 'gs://BUCKET_NAME';

exports.scheduledFirestoreExport = functions.pubsub
                                            .schedule('every 24 hours')
                                            .onRun((context) => {

  const projectId = process.env.GCP_PROJECT || process.env.GCLOUD_PROJECT;
  const databaseName = 
    client.databasePath(projectId, '(default)');

  return client.exportDocuments({
    name: databaseName,
    outputUriPrefix: bucket,
    // Leave collectionIds empty to export all collections
    // or set to a list of collection IDs to export,
    // collectionIds: ['users', 'posts']
    collectionIds: []
    })
  .then(responses => {
    const response = responses[0];
    console.log(`Operation Name: ${response['name']}`);
  })
  .catch(err => {
    console.error(err);
    throw new Error('Export operation failed');
  });
});

因此,使用上面的代码,我希望它能够导出firestore中的所有内容。例如,如果我有子集合:

orders/{order}/items

我希望当我通过GCP控制台导入数据时,我会得到上面列出的子集合。但是,我只会回到顶层。即

orders/{order}

0 个答案:

没有答案