【问题标题】:Firestore DB - documents shown in italicsFirestore DB - 以斜体显示的文档
【发布时间】:2018-06-16 16:21:16
【问题描述】:

谁能给我解释一下。我正在使用来自 github 的 Firestore 的 node-firestore-backup-restore-master 备份脚本。让它工作,但它只读取我在集合中的文档列表中的一个文档。它读取的是普通文本,其余的是斜体,斜体的消息说它们不存在并且不会出现在查询中。

它们确实存在,并且当我从我的 IOS 应用程序而不是从 Node.js 备份脚本查询时出现的相关文档和字段。

有什么想法吗?? 戴夫

【问题讨论】:

    标签: google-cloud-firestore firebase-console


    【解决方案1】:

    如果您使用子文档创建文档,然后从 SDK 中删除顶级文档,则删除不是递归的。因此,虽然顶级文档消失了,但它的子文档仍然存在。

    这些的文档 ID 在 UI 中显示为斜体 ID:这些文档实际上并不存在,但我们显示它们以便您可以导航到子集合。

    由于不再有文档,因此文档本身不会出现在查询结果中。如果您需要在查询结果中找到此文档,您需要创建一个空文档作为解决方法。


    如果您需要通过 API 获取这些不存在的文档,唯一的方法是对子集合执行 collection group query 并从那里确定父文档。

    【讨论】:

    • 您可以添加任何建议来处理这种情况吗?如何以编程方式获取这些文档(使用 cronjob 删除它们或重新分配它们)?任何想法都会有用
    • 是的,我遇到了这个确切的问题并通过执行递归批量删除操作来修复它。(在更深层次上,您可以将此递归批量删除操作移动到 Firebase 云函数,以便它在云,而您的前端应用不会受到任何影响)
    • 我不认为有一个 API 可以获取“所有只有子集合的文档引用”。相反,我会推荐相反的方法:删除所有子集合时删除它们的“包含”文档。
    【解决方案2】:

    在firestore中,文档以斜体显示,因为,

    1. 删除集合或带有子集合、子文档的文档。
    2. 将集合和文档添加到空文档中。

    斜体文档不会显示在您的应用程序中,无法获取,唯一的方法是直接指定文档的确切路径和名称。

    解决方案:

    不要只向空文档添加一个集合,而是在添加集合之前在该文档中添加一个空字段。

    在 android 中,我向该字段添加了一个空的哈希映射。但不会显示在数据库中 这是我的示例代码:

    Map<String ,Object> dummyMap= new HashMap<>();
    DocumentReference df=db.collection("col1").document("doc1");
    df.set(dummyMap);  // add empty field, wont shown in console
    df.collection("your collection name");
    

    dummyMap 和您的集合在同一个文档“doc1”中。

    【讨论】:

    • 这对了解第 2 点非常有帮助,将集合和文档添加到空文档将产生此结果。谢谢!
    【解决方案3】:

    这发生在两种情况下:

    1. 如果您删除带有子集合的文档

    2. 如果您直接创建类似“/collection/document(1)/collection/document(2)”的内容,而不是分两步创建:

      • 步骤 1. 创建:/collection/document(1)
      • 步骤 2. 创建:/collection/document(1)/collection/document(2)

    并且看起来如果您在任何这些情况下都无法列出“文档(1)”,这是一种非常奇怪的工作方式,因为它们不作为“文档”存在(这是它们被标记的方式'italic') 但它们“存在”为对子集合的引用。

    【讨论】:

      猜你喜欢
      • 2021-06-21
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 1970-01-01
      • 1970-01-01
      • 2021-07-12
      • 1970-01-01
      相关资源
      最近更新 更多