firebase - 有没有办法在父文档不为空的情况下在 Firestore 中添加自定义路径子集合?

标签 firebase data-structures 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_idcategory_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 创建文档,没有中间将创建文档(即没有commentvideo 文档)。

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

让我们举个例子:假设一个文档v1

comments/cat1/videos/v1

还有一个在uc1

comments/cat1/videos/v1/usercomments/uc1

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

因此,如果您希望能够查询这些父文档,则必须自己创建它们。

关于firebase - 有没有办法在父文档不为空的情况下在 Firestore 中添加自定义路径子集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55197872/

相关文章:

java - 是否可以进行查询来检查集合是否存在?

javascript - Firebase Cloud Functions - 上下文参数引用带来错误 : firestoreInstance. settings is not a function at snapshotConstructor

java - 如何从 Firebase 将整数显示到 Textview?

java - 检查firebase实时数据库用户名是否存在

data-structures - 二项式堆上的正确功能实现

php - 在 PHP 中循环数组的更好方法是什么?

data-structures - 如何实现递归deftype

ruby - 在 firebase firestore 中超时读写数据

firebase - 在 firebase 中重新部署相同的 Cloud Function 是否会占用额外的空间?

java - 当用户登录时,来自 Firebase 数据库的评论电子邮件为空