【问题标题】:Is there a way to add a custom path subcollection in Firestore without the parent document being empty?有没有办法在 Firestore 中添加自定义路径子集合而父文档不为空?
【发布时间】:2019-08-07 10:25:55
【问题描述】:

我正在 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当前是否存在,如果不简单地添加一个像布尔值exists: true这样的字段?

编辑:我猜唯一的方法是在创建文档时通过云函数添加字段exists: true,但我不确定是否在子集合中创建文档来自客户端的新文档将触发创建更高级别文档的功能。等我知道了再更新。

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

【问题讨论】:

    标签: firebase data-structures google-cloud-firestore


    【解决方案1】:

    实际上,您问题中的以下陈述并不准确:“如果它们尚不存在,它将自动添加 video_id 和 category_name 文档”。

    如果您直接在具有完整路径 comments/{category_name}/videos/{video_id}/usercommentsusercomments 集合下创建文档,将不会创建中间文档(即不会创建 commentvideo 文档)。

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

    举个例子:想象一下v1下的一个doc

    comments/cat1/videos/v1
    

    还有一个uc1在下面

    comments/cat1/videos/v1/usercomments/uc1
    

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

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

    【讨论】:

    • 是的,我知道当没有字段时它们在技术上不存在,但这是否意味着编写 onCreate() 云函数将毫无用处,因为控制台仅“具体化”文档但没有t 实际上将它们创建为空?
    • 我猜你的意思是在创建usercomment 文档时会触发一个云函数。此 Cloud Function 将如何知道父文档的 id 和值?他们将在usercomment 文档中?如果是,您为什么不在创建usercomment 文档时创建它们(我猜是从您的前端)?
    • 不,父文档不是“创建为空”的,它们根本没有创建。
    • 不,我的意思是为创建较低级别文档时不存在的较高级别文档触发的云功能。例如,当创建video_id 文档时,会向视频文档添加一个字段。听起来它可能不会像你描述的那样被触发......
    • 云函数不会被触发,因为那些父(更高级别)文档不是在数据库中创建的。
    猜你喜欢
    • 1970-01-01
    • 2020-02-27
    • 2020-01-22
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 2020-12-15
    相关资源
    最近更新 更多