【问题标题】:How to structure sub node of collections in Firestore?如何在 Firestore 中构造集合的子节点?
【发布时间】:2018-03-22 21:22:57
【问题描述】:

我正在尝试将以下结构从实时数据库迁移到 Firestore:

•   Resources
    o   SENT
           resId1
               •    name : xxxx
               •    url : xxx
           resI2
               •    name ……
   o    ACCEPT
           resId3
           etc……
   o    REFUSED
           restIdn 
           etc….

所以在根节点“资源”下,我有一些包含资源项列表的子节点(SENT、ACCEPT、REFUSED...)。

使用 Firestore,我似乎无法在集合下直接使用 subCollection(当我尝试在管理控制台中使用 Firestore 重现此结构时,我需要创建一个中间文档,例如:

Collection --> document --> SubCollection --> documents

女巫通向那个结构:

Resources --> SENT --> SENT --> resId1 {name: xxx, url: yyyy}

所以子节点“SENT”被复制了两次(一个用于文档,一个用于子集合)。 如果我与 firebase 实时数据库进行比较,这根本不是改进或简化。
我错过了什么吗?这种数据库结构的最佳方式是什么?

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:

    (2017 年 10 月 13 日上午 11 点编辑)

    似乎有两种结构适合您。

    选项 1:三个根集合

    在 Firestore 数据库的根目录创建三个集合

    • resources-sent
    • resources-accept
    • resources-refused

    每一个都包含文档。

    选项 2:一个根集合

    Firestore 允许复合查询,因此您只需在根目录创建一个名为 resources 的集合,然后在每个文档中添加一个 type 参数,其中 type[sent, accept, refused] 之一。

    然后你可以做这样的查询:

    // Get all sent resources
    db.collection("resources").where("type", "==", "sent").get()
    

    由于 Firestore 的内置索引,此查询总是很快!'

    选项 3:子集合。

    创建一个名为 resources 的根集合,其中仅包含三个文档:

    • sent
    • accept
    • refused

    为这些文档中的每一个创建一个resources 子集合。

    所以要获取所有发送的资源:

    // Get all sent resources
    db.collection("resources").doc("sent").collection("resources").get()
    

    【讨论】:

    • No Resources 不是根数据库,它只是特定项目的集合(或节点)。而且我可能有超过 3 个子类别
    • 资源是否属于其他文档?我需要更多信息。
    • No Resources 是根之后的第一个节点(就像一种表);还有一些其他的根节点,唯一的区别是这个节点“资源”分为子类别(例如Sent,Accept等......)
    • 选项 2 很高兴不知道查询总是很快,它可以适合许多用例。但是对于一些特定的用例(并使其更容易在管理控制台中维护);我希望在树节点中有一个“根”类别,选项 1 不适合,因为子类别的数量可能超过 3 个,并且在“根类别”下显示它们看起来更清晰,例如“资源”。如果 RTDB 很容易,那么 Firestore 似乎不可能。也许新的改进可能是允许将 SubCollection 直接放在集合下(不确定技术上是否可行)。
    • @toofoo 如果你真的想这样做,我已经添加了第三个选项
    猜你喜欢
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 2021-01-15
    • 1970-01-01
    • 2021-08-27
    相关资源
    最近更新 更多