如何在 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()
我正在尝试将以下结构从实时数据库迁移到 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()