7

Firebase データベースがあります。Job オブジェクトと Item オブジェクトがあります。各ジョブには多くのアイテムを含めることができ、1 つのアイテムは 1 つのジョブに含める必要があります (単純な 1 対多)。私の現在のデータベース構造は、アイテムとジョブの両方がfirebaseの最上位リストであり、各アイテムにはそれが属するjobKeyが含まれています。これにより、ジョブ キーを知っている限り、ジョブ内のすべてのアイテムを見つけることができます。アイテムを見つけるための firebase コードには、アイテムの jobKey に "orderBy" を含むクエリが必要です。そのため、ジョブのすべてのアイテムを簡単に取得できます。ただし、アイテムの追加データに基づいてアイテムを並べ替えてフィルター処理することも必要です。しかし、単一の「orderBy」のfirebase制限のため、firebaseを使用してこの2番目のレベルのフィルタリングを達成することはできません。これが私の課題です。私の現在のデータの構造を以下に示します。

+--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 を使用しています)、すべてのアイテムを何らかのコレクションにキャッシュしてから、キャッシュされたデータに基づいてソートおよびフィルタリングします。これはあまり満足のいくものではありません。もっと良い方法があるはずです。合理的な代替手段は何ですか?

4

1 に答える 1