如何在 Firestore 中构建集合的子节点?

How to structure sub node of collections in Firestore?

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

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

所以在根节点“资源”下,我有一些包含资源项列表的子节点(发送、接受、拒绝等)。

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

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

导致该结构:

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

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

(编辑于 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()