【问题标题】:Firestore recursive collections backupFirestore 递归集合备份
【发布时间】:2020-06-01 07:26:17
【问题描述】:

是否可以备份集合的层次结构?

我们将数据存储为:

 * users
     * user1
         * userInfo (on the user1 document)
         * accounts
             * account1
             * account2
         * jobs
             * job1
             * job2
             * job3
     * user2...

 * chats
     * chat1
         * chat metadata (on the chat document)
         * messages
             * message1
             * message2
         * chatUsersInfo
             * userInfo1
             * userInfo2
             * userInfo3 

(还有更深层次的子系列)

我将这个示例用于备份作业https://firebase.google.com/docs/firestore/solutions/schedule-export

有没有办法按原样备份数据,而不仅仅是第一级文档?

是否可以仅恢复部分层次结构(即恢复 user1 数据)?

有没有办法从备份中排除某些集合(即作业)?

【问题讨论】:

  • 当你说备份时,是什么意思?用例是什么?
  • 如果出现可能导致数据丢失的流错误,我希望能够将数据恢复(到同一个 Firestore 实例)。即开发人员可能会意外删除其中一个集合,我们需要恢复它
  • 我不是 Firebaser,但他们会备份数据以防数据丢失。您可以选择将 Firebase 备份到您的设备,方法是编写代码以读取数据,然后以您喜欢的任何格式将其保存在本地。正如您所提到的,通过 Cloud Functions 导出数据。如果您需要有关服务器级别的 Firebase 备份的详细信息,您应该直接联系 Firebase support,因为这超出了我们的帮助范围。

标签: firebase google-cloud-firestore


【解决方案1】:
  • 是否可以备份集合的层次结构?

您只能使用collectionsIds 字段过滤特定的集合。这是使用gcloud firestore export command 的示例。

一般而言,如果您只需要备份特定数据,则需要创建一个应用程序,该应用程序可以进行相关查询以读取您感兴趣的相关集合或文档,并将其保存为您认为更方便的任何格式的任何地方'喜欢(例如云存储)。

  • 有没有办法按原样备份数据,而不仅仅是第一级文档?

正如我在上一个问题中已经建议的那样,如果您只对备份整个 Firestore 实例中的特定数据感兴趣,那么您需要创建一个应用程序来查询要导出的特定数据 (请参阅documentation 了解您需要的特定查询:列出文档中的子集合或从集合组中获取多个文档等)

  • 是否可以仅恢复部分层次结构(即恢复 user1 数据)?

您将无法恢复层次结构的特定部分,但您可以import only a specific set of collections using the collectionsIds field 以类似的方式:

gcloud firestore import gs://[BUCKET_NAME]/[EXPORT_PREFIX]/ --collection-ids=[COLLECTION_ID_1],[COLLECTION_ID_2]

  • 有没有办法从备份中排除某些集合(即作业)?

请注意,正如您在 example shared 中所述,您可以使用 collectionsIds 字段创建一个列表,其中仅包含您要导出的集合(因此,通过不添加您不想导出的集合,您可以将它们从导出操作中排除)。

  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: []
    })

【讨论】:

    猜你喜欢
    • 2020-08-10
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 2016-07-09
    相关资源
    最近更新 更多