2017-01-09 14 views
0

Firebugには初心者です。ここに私のサンプルデータベースがあります。Firebaseデータベース内のオブジェクトを検索

{ 
    groups:{ 
    #groupid:{ 
     members:{ 
     #userid: 
     } 
     name: 
    } 
    } 
} 

enter image description here

私は、ユーザーのグループを見つけようとしています。グループ名で検索するとデータを取得できます。

let lRef = FIRDatabase.database().referenceWithPath("groups") 
    lRef.queryOrderedByChild("name").queryEqualToValue("one").observeSingleEventOfType(.Value, withBlock: { snapshot in 
     print("hello world \(snapshot.value)") 
    }) 

メンバーでユーザーIDを検索すると取得できません。誰か助けてください。

+0

私はすぐにクエリがうまくいかない理由を知りませんので、他の人がそれを見つけてくれることを願っています。しかし、あなたは間違いなく異なるタイプのデータを入れています。これは、Firebaseが推奨するものです。 2つのトップレベルノード '/ groups/$ groupid'と'/members/$ groupid'を作成して、それらの間にある同じデータを分割することをお勧めします。クエリの問題を解決することはできませんが、今後の多くの頭痛を防ぎます。 –

答えて

1

これはネストされたデータの完全な例です。

Googleはこのトピックについて良いdocumentationを提供しています。彼らはこれを避けることをお勧めします。ここで

は引用です:

ネスティングデータを避けFirebaseリアルタイムデータベースがネスティングデータは最大32のレベルの深ことができますので、あなたはこれがデフォルトであることを考えるように誘惑されるかもしれません構造。ただし、データベースのある場所でデータをフェッチすると、すべての子ノードも取得されます。さらに、データベースのノードで誰かに読み取りまたは書き込みアクセス権を与えると、そのノードの下にあるすべてのデータへのアクセスも許可されます。したがって、実際には、データ構造を可能な限りフラットに保つことが最善です。

おそらく、データベースにユーザーメタデータを持つ別のノードがあるとします。そのユーザーノードには、ユーザーが属するすべてのグループを含む子が必要です。

私が正しいとすれば、これはまさにあなたは達成しようとしています。

データベースは/次のようになりますでしょう:

{ 
    groups: { 
    #groupid01: { 
     members: { 
     #userid: true, 
     } 
     name: #groupname01 
    }, 
    #groupid02: { 
     members: { 
     } 
     name: #groupname02 
    } 
    }, 
    users: { 
    #userid01: { 
     groups: { 
     #groupid01: true, 
     #groupid02: true 
     } 
    }, 
    #userid02: { 
     groups: { 
     } 
    }, 
    ...: {}, 
    } 
} 

は、この情報がお役に立てば幸い!

関連する問題