Mr.*_*rew 3 data-structures firebase google-cloud-firestore
我正在 Firestore 中创建一个“深”路径方案。(6 部分路径,3 个集合和 3 个文档)类似collection/document/collection/document/collection/document或更真实的示例:comments/{category_name}/videos/{video_id}/usercomments/{auto_generated_id}
所以问题是 Firestore 允许在嵌套子集合中为当前不存在的文档的任何路径添加文档。因此,当在路径末尾添加用户评论文档时,如果它们不存在,它将自动添加video_id和category_name文档,但文档为空(或如控制台中所说,“不存在”)和因此不会出现在查询或快照中。
会发生什么是usercomments集合中会有很多文档,但我无法检索列表,video_ids因为videos集合中的文档在技术上都是“空的”。
我怎样才能保持这个路径逻辑方案并且仍然能够通过没有字段的更高级别的文档进行查询?有没有办法在添加评论时检查video_id当前是否存在,如果不简单地添加一个像 boolean 这样的字段exists: true?
编辑:我猜唯一的方法exists: true是在创建文档时通过云函数添加字段,但我不确定在客户端新文档的子集合中创建文档是否会触发创建功能更高级别的文档与否。一旦我发现这一点,我会更新。
更新:感谢@Renaud Tarnec 提供的信息,我能够制作一个云功能,该功能将使用字段设置更高级别的文档,以便它们“存在”/实际创建。事实证明,您可以从函数中嵌套文档路径的上下文中提取所有通配符,以正确地动态编辑更高级别的文档字段。
实际上,您问题中的以下陈述并不准确:“如果 video_id 和 category_name 文档尚不存在,它将自动添加它们”。
如果您直接在usercomments具有完整路径的集合下创建文档comments/{category_name}/videos/{video_id}/usercomments,则不会创建中间文档(即 nocomment或videodocs)。
Firebase 控制台以斜体显示它们,以“具体化”层次结构并允许您导航到usercomment文档,但它们不存在于 Firestore 数据库中。
让我们举个例子:假设一个文档v1下
comments/cat1/videos/v1
Run Code Online (Sandbox Code Playgroud)
uc1下一个
comments/cat1/videos/v1/usercomments/uc1
Run Code Online (Sandbox Code Playgroud)
实际上,从技术角度来看,它们之间根本没有关系。他们只是分享他们路径的一部分,但没有其他任何内容。这样做的一个副作用是,如果您删除一个文档,它的子集合仍然存在。
因此,如果您希望能够查询这些父文档,则必须自己创建它们。
| 归档时间: |
|
| 查看次数: |
1115 次 |
| 最近记录: |