我有一个 Firebase 数据库。我有 Job 对象和 Item 对象。每个 Job 可以包含多个 Item,一个 Item 必须包含在一个 Job 中(简单的一对多)。我目前的数据库结构是 Item 和 Job 都是 firebase 中的顶级列表,每个 Item 都包含它所属的 jobKey。只要我知道作业密钥,这使我可以找到作业中的所有项目。用于查找项目的 firebase 代码需要一个查询,其中包括项目中的 jobKey 和一个“orderBy”。因此,很容易检索作业的所有项目。但是,我还想根据项目中的附加数据对项目进行排序和过滤。但是由于单个“orderBy”的firebase限制,我无法使用firebase完成第二级过滤。这是我的挑战。我目前的数据结构如下图所示。
+--jobs
|
+-- jobKey1
| |
| +-- <jobdata1> ..
|
+-- jobKey2
|
+-- <jobdata2>..
+--items
|
+-- itemKey1
| |
| +-- jobKey : jobKey2 // this item belongs to job2
| |
| +-- <the rest of item1 data
|
+-- itemKey2
| |
| +-- jobKey : jobKey2 // this item belongs to job2
| |
| +-- <the rest of item2 data
|
+-- itemKey3
| |
| +-- jobKey : jobKey1 // this item belongs to job1
| |
| +-- <the rest of item3 data
|
+-- itemKey4
|
+-- jobKey : jobKey1 // this item belongs to job1
|
+-- <the rest of item4 data
如前所述,我希望能够检索作业的所有项目,然后按项目中的各个字段对项目进行排序和过滤。鉴于上面的结构,这样做的唯一方法(我看到)是使用 firebase 查询来检索项目,然后使用组件中的逻辑(我正在使用 angular2)将所有项目缓存到某种集合中然后根据缓存的数据进行排序和过滤。这不是很令人满意,必须有更好的方法。有哪些合理的替代方案?