【问题标题】:Query subcollection document existence in firestore在firestore中查询子集合文档是否存在
【发布时间】:2022-10-19 23:12:05
【问题描述】:

我目前有一个看起来像这样的 Firestore 架构:

Threads (threadid)
    Users (userid)
        admin
    title

我想要做的是执行一个查询,该查询返回用户 ID 的子集合文档存在的所有线程文档。我见过集合组,但是我对如何使用它来查询文档的存在而不是文档的属性感到困惑。我还有一个名为“Users”的根集合以及一个子集合,我不清楚如何区分它们。

【问题讨论】:

    标签: javascript google-cloud-firestore


    【解决方案1】:

    我还有一个名为“Users”的根集合以及子集合,我不清楚如何区分它们。

    您可以使用 Sam 在此处展示的技巧仅搜索 Threads 下的 Users 集合:CollectionGroupQuery but limit search to subcollections under a particular document

    由于您无法查询文档是否存在,因此您必须阅读此集合组中的所有文档,然后检查是否得到任何结果。

    【讨论】:

    • 不幸的是,我不太明白如何从该解决方案转到我需要的解决方案,因为您链接到的解决方案知道城市 ID(根文档 ID)。在我的情况下,我不知道线程 ID,我试图通过查询子集合文档 ID 的存在来获取用户所属的所有线程的列表。您能否详细说明如何将这两个概念结合起来?
    • 该链接执行前缀查询。虽然那里的答案确实是根集合和文档的前缀,但您可以只对集合名称执行完全相同的操作。试试看。
    • 我想我在这里不理解的是前缀是集合和文档 ID,而 firestore 不允许在其路径查询中使用通配符,所以我对如何从本质上查询感到困惑:“/threads/*/users /{用户身份}”。在尝试过之后,目前还不清楚如何实现这一点。
    • 您将查询集合组users,然后对threads 路径进行前缀过滤,因此startAt('threads').endAt('threads/uf8ff')
    • 我将在哪里使用用户 ID 作为查询的变量?
    【解决方案2】:

    我不相信这个问题有一个令人满意的答案,并且相信当时考虑到限制它是棘手的。但是有一个解决方法,我在Users 子集合中添加了对Thread 文档的引用,所以现在架构看起来像这样:

    Threads (threadid)
        ThreadUsers (userid)
            admin
            threadref
            userref
        title
    Users (userid)
    

    现在我可以执行一个集合组查询来查找所有包含特定userref 的ThreadUsers 文档,这将为我提供与用户关联的线程引用列表。

    【讨论】:

      猜你喜欢
      • 2019-04-19
      • 2020-11-17
      • 1970-01-01
      • 2020-07-26
      • 2019-01-08
      • 2020-12-02
      • 2020-05-08
      • 1970-01-01
      • 2018-06-03
      相关资源
      最近更新 更多