2017-10-11 62 views
0

我试图从迁移实时数据库结构如下,以公司的FireStore:如何构建Firestore中的集合的子节点?

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

所以在根节点“资源”我有一些子节点(SENT接受,拒绝...)包含资源项目清单。

随着公司的FireStore看来我不能有子集合直接托收项下(当我尝试重现这种结构与公司的FireStore在管理控制台中,我需要创造这样一个中间文件:

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

女巫导致该结构:

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

所以子节点“已发送”被重复两次(一个用于文件和一个子集) 这不是一个改进或简化所有,如果我火力比较实时数据库。
我错过了什么吗?这种数据库结构的最佳方式是什么?

回答

3

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

没有资源不是特定项目的根数据库,它只是一个集合(或节点)。我可能有超过3个子类别 – toofoo

+0

资源是否属于其他文档?我需要更多信息。 –

+0

没有资源是根后的第一个节点(比如一种TABLE);还有一些其他的根节点,唯一不同的是这个节点“资源”被划分在子类别中(例如已发送,接受等.....) – toofoo