我正在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
,而不是仅添加布尔值exists: true
之类的字段?
编辑:我猜测唯一的方法是在创建文档时通过云函数添加字段exists: true
,但是我不确定是否在来自客户端的新文档的子集合将触发是否创建高级文档的功能。找出答案后,我会更新。
更新:感谢@Renaud Tarnec提供的信息,我能够制作一个云函数,该函数将使用字段设置更高级别的文档,以便它们“存在” /实际创建。事实证明,您可以从函数中嵌套文档路径的上下文中提取所有通配符,以正确地动态编辑更高级别的文档字段。
答案 0 :(得分:1)
实际上,您的问题中的以下说法不正确:“如果不存在,则会自动添加video_id和category_name文档。”
如果您直接在usercomments
集合下创建具有完整路径comments/{category_name}/videos/{video_id}/usercomments
的文档,则将不会创建任何中间文档(即不会创建comment
或{ {1}}个文档)。
Firebase控制台以斜体显示它们,以“具体化”层次结构,并允许您导航到video
文档,但它们在Firestore数据库中不存在。< / p>
让我们举个例子:想象一个文档usercomment
下的
v1
和下面的另一个comments/cat1/videos/v1
uc1
实际上,从技术角度来看,它们根本没有关联。他们只是分享自己的道路的一部分,但没有别的。这样做的副作用是,如果删除文档,则其子集合仍然存在。
因此,如果您希望能够查询这些父文档,则必须自己创建它们。