example configurar con agregar ios swift firebase swift2 firebase-database

ios - configurar - Firebase, Swift: Recuperando solo aquellos nodos `autoID` que tienen una clave especĂ­fica



firebase ios swift example (1)

Si no te importa el valor de las powers , solo te preocupa que la clave exista bajo el nodo autoId, solo necesitas .queryEqualToValue("") (esto depende del valor del par clave-valor que es una cadena, para un número, en lugar de "" solo use 0 [dependiendo de que sus valores sean mayores o iguales que 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 })

Pregunta --->

  1. ¿Hay alguna manera de recuperar un nodo cuya clave es un autoID , que podría contener una clave en particular? Al igual que en la estructura JSON de abajo, tengo un nodo secundario dentro de algunos autoID , no todos ellos , quiero recuperar solo aquellos nodos que tienen powers clave en ellos sin saber cuál es el value correspondiente.

  2. En el siguiente enfoque sugerido, ¿cuál consumiría menos BandWidth ?

Mi árbol 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"

¿Qué he intentado --->

  • Recupere todo el node12 y luego compruebe cuál de los ID de auto tiene una key particular. por ejemplo, digamos poderes: "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{ // } })

  • Mi otra solución alternativa es:

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

Nota: - Encontré una Q bastante similar publicada en el foro de Firebase, pero parece que nadie la responde: https://groups.google.com/forum/#!topic/firebase-talk/ZDHKwxRMiKQ