我正在 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
创建文档,没有中间将创建文档(即没有comment
或video
文档)。
Firebase 控制台以斜体显示它们,以便“具体化”层次结构并允许您导航到 usercomment
文档,但它们不存在于 Firestore 数据库中.
让我们举个例子:假设一个文档v1
在
comments/cat1/videos/v1
还有一个在uc1
下
comments/cat1/videos/v1/usercomments/uc1
实际上,从技术角度来看它们之间根本没有关系。他们只是共享他们路径的一部分,除此之外别无其他。这样做的一个副作用是,如果您删除文档,其子集合仍然存在。
因此,如果您希望能够查询这些父文档,则必须自己创建它们。
关于firebase - 有没有办法在父文档不为空的情况下在 Firestore 中添加自定义路径子集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55197872/