2016-09-09 103 views
0

问题--->火力地堡,斯威夫特:只获取`autoID`节点的具有特定键

  1. 有没有一种方法来检索其关键是autoID一个节点,它强权包含一个特定的键。像下面JSON结构,我有内部的一些autoID的,子节点powers不是所有的人的,我只想检索这其中有关键powers这些节点不知道什么相应value可能。

  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" 

有什么我试过--->

  • 检索整个node12,然后检查其自动识别“的s有一个特定的key。对于如可以说权力: “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{ 
    
         // 
         } 
        }) 
    
  • 我的其他可替代的解决方案是: -

    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 
    
         } 
        }) 
    
    }) 
    

注: -我发现张贴在火力地堡论坛几分相似Q,但似乎没有人回答它: - https://groups.google.com/forum/#!topic/firebase-talk/ZDHKwxRMiKQ

回答

2

如果您不在乎powers的值,您只关心密钥存在于autoId节点下,您只需要.queryEqualToValue("")(这取决于键值对是字符串的值,而不是“”,只是使用0 [取决于您的值大于或等于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 
})