2

NoSqlを試してみたいと思い、Firebaseでプロジェクトを開始しました。私のアプリのデータが大幅に増加しました。しかし、今は国別のアプリを実行して、アプリの国別データを表示/フィルタリングする必要があります。火災基地の複数の国の質問リスト

現在のデータの構造は次のとおりです。

{ clients: { 
    "04E2LBixKoVn9sGzRvxtMoC7MsF3" : { 
    "clientName" : "Rising Mall", 
    "contact" : { 
     "branches" : { 
     "-Kx6QoVhr0WpDQ3i68_n" : { 
      "address" : "Test Location", 
      "phone" : "999999999", 
      "country": "USA" 
     } 
     }, 
     "mail" : "[email protected]", 
     "website" : "http://www.test.np" 
    }, 
    "description" : "Test Description."} 
    }, 
    "073ezb0UsgetSef0lwk50dhogjM2" : { 
    "clientName" : "Leather Craft", 
    "contact" : { 
     "branches" : { 
     "-Kx6QoVj_QKM7tjekh_1" : { 
      "address" : "Test Location", 
      "phone" : "888888888" 
      "country": "UK" 
     } 
     }, 
     "mail" : "[email protected]", 
     "website" : "https://www.test.com" 
    }, 
    "description" : "Test" 
    } 
} 

上記の構造から、国が「アメリカ」であるすべてのクライアントのリストを取得したいと考えています。 AndroidでFirebaseDatabaseを照会することで、どうすれば直接行うことができますか?出来ますか?または、データベースの構造を完全に変更する必要がありますか?データベースを再構成する必要がある場合は、その解決策も提案してください。

UPDATE

私は@アレックス・マモによって与えられた提案を取り、データを非正規化して、すべての私の構造を設計しました。

Firebase-root 
    | 
    --- usClients 
      | 
      --- usClientId1 : true 
      | 
      --- usClientId2 : true 
+0

データベース構造を変更する必要があります。それは可能でしたが、多くの方法を取る –

+0

@NikunjParadva構造の提案はありますか? –

答えて

1

これを実現するために、あなたはそれを少し変更する必要があり、完全にあなたのデータベースを再構築する必要はありません。この問題を解決するには、usClientsというデータベースに別のノードを追加する必要があります。米国の新しいユーザーを追加するたびに、この新しい作成されたノードにも追加します。新しいノードは次のようになります。

Firebase-root 
    | 
    --- usClients 
      | 
      --- usClientId1 : true 
      | 
      --- usClientId2 : true 

この構造では、データベース内で米国内のクライアントのみを取得することができます。これは、ノードusClientsにリスナーを接続し、DataSnapshotオブジェクトのリスナーを接続することで行うことができます。

この練習は、非正規化と呼ばれ、Firebaseについては一般的なプラクティスです。理解を深めるために、このビデオ、Denormalization is normal with the Firebase Databaseをご覧ください。

+0

ありがとうございます。私はビデオに潜入し、私はどのように私のDBを構築することができます参照してください。 –

関連する問題