当前位置: 首页 > 知识库问答 >
问题:

有没有办法在Firestore中添加自定义路径子集合,而父文档不为空?

阎丰羽
2023-03-14

我正在创建一个"深"路径方案在FiRecovery.(6部分路径,3个集合和3个文档)类似于集合/文档/集合/文档/集合/文档或在更真实的世界示例:评论/{category_name}/视频/{video_id}/用户评论/{auto_generated_id}

所以问题是Firestore允许在嵌套子集合中为当前不存在的文档的任何路径添加文档。因此,当在路径的末尾添加用户评论文档时,如果它们不存在,它会自动添加视频id类别名称文档,但这些文档是空的(或者在控制台中说,“不存在”),因此不会出现在查询或快照中。

会发生的情况是,在用户评论集合中会有很多文档,但我无法检索到video_ids的列表,因为视频集合中的文档在技术上都是"空"的。

如何保持这种路径逻辑方案,并且仍然能够查询没有字段的更高级别文档?在添加评论时,是否有方法检查视频\u id当前是否存在,如果不是简单地添加一个类似布尔值的字段:true

编辑:我猜唯一的方法是在创建文档时通过云函数添加字段exists:true,但我不确定在客户端新文档的子集合中创建文档是否会触发创建更高级别文档的功能。一旦我发现这一点,我会更新。

更新:感谢@Renaud Tarnec提供的信息,我能够制作一个云函数,该函数将使用字段设置更高级别的文档,以便它们“存在”/实际创建。事实证明,您可以从函数中嵌套文档路径的上下文中提取所有通配符,以正确动态编辑更高级别的文档字段。

共有1个答案

公西翊歌
2023-03-14

实际上,你问题中的以下陈述并不准确:“如果视频id和类别名称文档不存在,它会自动添加它们”。

如果直接在usercomments集合下创建一个文档,其完整路径为comments/{category_name}/videos/{video_id}/usercomments,则不会创建任何中间文档(即没有commentvideodocs)。

Firebase控制台以斜体显示它们,以便“具体化”层次结构并允许您导航到userCommentdoc,但它们不存在于FiRecovery数据库中。

让我们举个例子:想象一个docv1

comments/cat1/videos/v1

另一个uc1

comments/cat1/videos/v1/usercomments/uc1

实际上,从技术的角度来看,它们根本没有相互关联。它们只是共享它们路径的一部分,而不是其他。这样做的一个副作用是,如果您删除一个文档,它的子集合仍然存在。

所以,如果你想查询这些父文档,你必须自己创建它们。

 类似资料:
  • 我在我的FiRecovery数据库中查询子集合内的所有文档时遇到困难。(我使用的是Node.js) 我的目标是从名为 我看了看留档https://firebase.google.com/docs/firestore/query-data/get-data但没有任何结果如何解决问题。 我现在的问题是这样的: 但是我得到了

  • 我想创建一个集合而不在其中创建任何文档。但不是先创建文档,然后删除文档。我尝试了一些方法,但当我删除文档时,我的集合也被删除了。 Firestore图像

  • 您好,我是firebase firestore的新手,无法将对象直接添加到集合中查看图像错误结果和预期结果 尝试 它在余额集合下创建一个新文档,但我需要它的Object值直接在余额集合中

  • 我在Cloud Firestore中有以下简化的数据模式: 我现在想向用户展示他团队的所有“待办事项”文档,我不知道什么是最好的方法。 1. 集合组查询 - 按团队 ID 查询 为此需要两个查询。每个待办事项文档都可以具有父团队 ID,并通过集合组查询进行检索,例如 - 到目前为止,这对我来说似乎是最好的解决方案,但缺点是“IN”查询限制为10个值 https://firebase.googleb

  • 为了查询子集合和父文档,我对firest的文档及其最佳实践有一些问题。我试图使用Typecript在我的Firebase函数中进行查询。 DB: ├── 用户(集合) │ └── 用户(ID为的文档) │ │ └── 计划(子集合) 我有一个数组中的用户ID列表,我需要从用户文档和当前文档的子集合计划中收集信息。 但是如何从用户文档和子集合(计划)文档(当前)中获取数据,我不知道在场景中最有效的查

  • 问题内容: 没有关于如何在Firestore中的文档中添加子集合,如何使用Web应用程序添加子集合的文档? 甚至像这样尝试过,但没有奏效。如何使用代码在应用程序中添加子集合?有什么办法可以做到,还是使用Firebase实时数据库会更好?如果是这样,请让我知道如何在Firebase中执行此操作,我也想这样添加, 但我却收到这样的错误,错误说明了这一点 问题答案: 如果更改为,您的代码应该可以工作。然