2016-09-09 8 views
0

質問--->Firebase、スウィフト:のみ `autoID`ノードの特定のキー

  1. キーautoIDあるノードを取得する方法はあり、マイトを持っているの取得には特定のキーが含まれています。下のJSON構造のように、私は子ノードがpowersの中にあります。autoIDはすべてではありません。powersのキーがあるノードだけを取り出したいのですが、valueが対応しているかも知れません。

  2. 以下の2つのアプローチでは、バンド幅が狭くなります

私のJSONはツリー

node1 
    -node12 
    -autoId1 

     expo: "5122223333" 
     users: 
      -MqrvHRBTRcPzrvAOdkklBzeFW7E2 
       firstName: "Margery" 
       lastName: "Lady" 
    -autoId2 
     powers: "Triple3" 
     expo: "2123338983" 
     users: 
      -LqrsadaDs12BTRcPzrvABzeFW7E2 
       firstName: "Tyrion" 
       lastName: "Imph" 
    -node21 
    -autoId3 
     powers: "Triple" 
     expo: "5123333" 
     users: 
      -MqrvHRBTRcPzrvAOdkklBzeFW7E2 
       firstName: "Cersie" 
       lastName: "Lady" 
    -autoId4 
     powers: "Quad" 
     expo: "2128983" 
     users: 
      -LqrsadaDs12BTRcPzrvABzeFW7E2 
       firstName: "Sansa" 
       lastName: "Lady" 

私は--->

  • AUTOID "のチェック、その後全体node12とを取得する試みがありますどのような特にkeyを持っています。私はFirebaseフォーラムに投稿されたやや似Qを見つけましたが、 - :

    FIRDatabase.database().reference().child("node1").child("node12").queryOrderedByChild("powers").observeSingleEventOfType(.Value, withBlock: {(snap) in 
    
        if let snapDict = snap.value! as? [String : AnyObject]{ 
    
          print(snapDict.keys.first!) //Retrieving My AutoID .Nut this gives me entire node. 
    
         } 
    
         for each in snap.value as! [String:AnyObject]{ 
    
          print(each.0) //Retrieving My AutoID 
    
         } 
        }) 
    
    }) 
    

注 - : "Triple3"

let prntRef = FIRDatabase.database().reference().child("node1").child("node12") 
prntRef.observeSingleEventOfType(.Value, withBlock: {(snap) in 

    if snap.exists(){ 

    for each in snap.value as! [String:AnyObject]{ 

      prntRef.child(each.0 as! String).child("powers").observeSingleEventOfType(.Value, withBlock: {(IMsnap) in 

      if IMsnap.exists(){ 

       //Found The correct node 
       } 
      }) 
     } 
     }else{ 

     // 
     } 
    }) 
  • 私の他の代替ソリューションがある:例えばのために力を言うことができます - https://groups.google.com/forum/#!topic/firebase-talk/ZDHKwxRMiKQ

  • 答えて

    2

    powersの値を気にしない場合は、キーautoIdノードの下に存在する場合は、単に.queryEqualToValue("")が必要です(これは、キーと値のペアの値が文字列であるかどうかに依存します。数字ではなく、 "0"を使用します。 ])。

    let ref = FIRDatabase.database().referenceWithPath("node1/node12") 
    
    ref.queryOrderedByChild("powers") 
    ref.queryEqualToValue("") 
    ref.observeEventOfType(.Value, withBlock: { snap in 
    
        print(snap) // all the autoId nodes that have the powers key 
    }) 
    
    関連する問題