我已经从Firebase中尝试了export data来“备份”我的数据库,但令我惊讶的是,尽管它们被唯一地命名,但它没有导出子集合。有没有办法导出整个数据库?
我知道有NPM个软件包可以做到这一点,但是它并不能导出为GCP导出的二进制格式,从而更节省空间。
编辑:
我尝试通过scheduled cloud function和GCP console导出数据。我完全按照说明进行了操作,没有做任何更改。
他们都上传了一个文件夹,其中包含以下图片中的内容。
all_namespaces/all_kinds
我通过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}