2017-01-25 13 views
0

私はFirebaseでスコアノードました:iOSの - Firebaseフィルタクエリ

をスコアノードの下に私のデータ構造としてある:私はスコアデータをフィルタリングすることができ

{ 
"jjTO29ziQ2SjrH5PFzY7ZMpSgjq1-Kak6FCyGtdy_kcEPd4K" =  { 
    jjTO29ziQ2SjrH5PFzY7ZMpSgjq1 = "-Kak6FCyGtdy_kcEPd4K"; 
    score = 5; 
}; 
"jjTO29ziQ2SjrH5PFzY7ZMpSgjq1-KbE_pgfUsukOm4uW0bx" =  { 
    jjTO29ziQ2SjrH5PFzY7ZMpSgjq1 = "-KbE_pgfUsukOm4uW0bx"; 
    score = 4; 
}; 

質問?

は私がやってみました:

FIRDatabase.database().reference().child("scores").queryOrdered(byChild: "score").observeSingleEvent(of: .value, with: { (snapshot) in 

     debugPrint(snapshot.value ?? "nil") 

    }) 

しかし、結果を得ることができませんか?

Picture 1

+0

あなたはorderByChildとのデータによってフィルタリングすることができますが、私はあなたが避難所内部で得点している対応するノードを入力したため、あなたの問題があると思います。あなたは子供の頃にスコアを入力しているので、最初にあなたのidのそれぞれに入力する必要があります。 –

+0

問題は何ですか? 'debugPrint'が呼び出されますか? –

+0

@MagoNicolasPalacios:写真1のようにノードをセットアップしましたか? お勧めしますか? – user3804063

答えて

5

あなたはFirebaseに対してクエリを実行すると、あなたが得る結果ごとの3件の情報が含まれていFIRDataSnapshot

  • そのキー
  • その値
  • の相対位置他ノードへ

snapshot.valueを呼び出すと、スナップショットは辞書に変換されます。残念ながら、その辞書はキーと値のペアを保持できるだけなので、ノードの位置に関する情報は失われます。したがって、スナップショット内のデータが実際に正しくソートされている間に、その情報を捨ててしまいます。

解決策は、FIRDataSnapshotの組み込みのchildrenプロパティを使用して、子ノードを正しい順序でループすることです。 Firebase documentation on queryingはそれを行う方法のこのサンプルを持っています

_commentsRef.observeEventType(.Value, withBlock: { snapshot in 
    for child in snapshot.children { 
    ... 
    } 
})