2017-11-14 14 views
0

firebaseデータベースを、あるオブジェクトから別のオブジェクトに参照されるフラットモデルに再構成しました。以下の例のように、IDに基づいて顧客オブジェクトから関連ユーザーを参照します。firebaseリアルタイムデータベースから子データを取得

何らかの理由で、私は 'customer/1510925e-0541-474f-93c1-10890934fda9'のパスを指定すると、ユーザーオブジェクトのデータが返されることを期待しています。

顧客レコードを一覧表示する際にユーザーデータにアクセスするロジックとは何ですか?私はここで何が欠けていますか?

"customer" : { 
    "1510925e-0541-474f-93c1-10890934fda9" : { 
     "users" : { 
     "LlMNVWXvzLhmP24AKVciM2PvPVy2" : true, 
     "Q4sM188BgwRGYhJUiLDqgAzGGX72" : true 
     }, 
     "name" : "NiceCustomer" 
    }, 
    "634f6b10-1def-496d-af44-834ae3c69c27" : {..customer2.}, 
    "a7ca5d01-757c-4534-a9e1-154c53d160a7" : {..customer 2 etc.} 
    } 

答えて

1

「/ users /」などのユーザーデータのパスがあることを前提としています。したがって、ユーザーレコードのデータは、たとえば、「users/LlMNVWXvzLhmP24AKVciM2PvPVy2」を参照すると返されます。

お客様と関連付けられているユーザーを指定してレコードを索引付けするだけで、後でデータをフェッチするのが簡単になります。

"users":{ 
    "LlMNVWXvzLhmP24AKVciM2PvPVy2":{ 
    "customer" : "1510925e-0541-474f-93c1-10890934fda9" 
    } 
    "Q4sM188BgwRGYhJUiLDqgAzGGX72":{ 
    "customer" : "634f6b10-1def-496d-af44-834ae3c69c27" 
    } 
    ...for many, many records... 
} 

を...そして、あなたはどのユーザー(複数可)を見つける必要があり、特定の顧客レコードに(S)所属:

は、ユーザーデータがこのように見えたことを想像してみてください。ユーザーのリストが大きい場合は、関連するすべてのレコードを見つけるために多くの処理が必要になります。あなたは各ユーザーをチェックする必要があります。

お客様の質問に記載されているようにインデックスを作成している場合は、どのユーザーが顧客レコードを取得するのが簡単かを判断できます。顧客レコードをプルアップし、ユーザーIDを取得してから、/ usersパスからデータを取得してください。あなたが示すようにうん、私は、ユーザーのパスを持っているhttps://firebase.google.com/docs/database/android/structure-data#fanout

+0

は偉大な説明についてはFirebaseドキュメントを参照してください。私はそれを取得し始める。特定の顧客からすべてのユーザーをフェッチして、顧客レコードを取得する必要があるとします( 'customer/')。次に、顧客レコードがありますが、その特定の顧客のユーザーリストを取得するにはどうすればいいですか? 'customers/'/users配列のユーザーのリストを使用して 'users /'パスのレコードを取得していますか? これは2回のコールになりますか?最初のフェッチでユーザーレコードが返されないのは正常ですか? – Mark

+0

通常、ユーザーレコードは「customer」パスに対してフェッチされて返されません。そして、はい、そのクエリを行うための1つの方法は、最初に顧客レコードを取得し、次にユーザーのリストを使用して '/ user'パスをクエリしてさらなるデータを取得することです。 Firebaseデータベースを使用してレコードを検索する方法について私が気に入っているのは、ここです:https://firebase.google.com/docs/database/admin/retrieve-data#section-queries – HondaGuy

関連する問題