2016-07-25 13 views
1

これは私の木で取得していない:情報にFirebaseでチャイルズの関係なく数(スウィフト)

enter image description here

私はd値("its d")を取得したい

をしかし、私はすべての情報を得ることはありません

ref.queryOrderedByChild("userA") 
      .observeSingleEventOfType(.Value, withBlock: { (snapshot) in 
       if snapshot.exists() { 
        for child in (snapshot.value?.allValues)! { 
         if let fruits = child["c"] as? [String:String]{ 
          let name = fruits["d"] 
          print(name) 
          } 
        } 
+0

を取得するためのコード私の構造だあなたはより多くを説明することができます。 .. "Firebaseの子どもの数に関係なく"という言葉を理解していない... –

+0

@ EICaptainv2.0例えば、私は200の子を持っている私は最後の子供の値を取得したい – Eliko

+1

私はこの構造で可能だとは思わない...あなたは最後の値を得るためにそのキーを通過する必要があります... –

答えて

1

これは、特定の質問への答えです:

はFirebase

に情報をチャイルズの関係なく番号を取得していません

あなたが探しているものかどうかは不明ですが

「d」にするには、クエリは必要ありません。そのデータに直接アクセスできます。

はここ(あなたにマッチする)

"the_users" : { 
    "a" : { 
     "b" : { 
     "c" : { 
      "d" : "It's d" 
     } 
     } 
    } 
    } 

と 'D' の値に

let theUsersRef = rootRef.child("the_users") 
let dRef = theUsersRef.child("a/b/c/d") 
dRef.observeSingleEventOfType(.Value, withBlock: { snapshot in 
    let msg = snapshot.value as! String 
    print(msg) 
}) 

と出力

It's d 
0

を印刷し、あなたがqueryOrderedByChild("userA")を呼び出すと、それはのプリミティブな値で注文するデータベースを伝えますプロパティ。あなたのJSONではプリミティブな値を持つuserAプロパティがないので、order byステートメントは無意味です。

クエリ内のデータをフィルタリングしないため、リスナを接続する場所のすべてのデータを含むスナップショットが取得されます。あなたのコードサンプルからはどこにあるのかはっきりしていませんが、JSONツリーでは子がある場所よりも高い可能性が非常に高いです。cが存在します。つまり、名前を印刷していないことを意味します。

すべての子供たちあなた簡易印刷であればそれはおそらくたくさんより明確になります。

ref.queryOrderedByChild("userA") 
    .observeSingleEventOfType(.Value, withBlock: { (snapshot) in 
     if snapshot.exists() { 
      for child in (snapshot.value?.allValues)! { 
       print(child.key) 
       if let fruits = child["c"] as? [String:String]{ 
        let name = fruits["d"] 
        print(name) 
       } 
      } 
     } 
    }) 
関連する問題