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 --->
¿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 algunosautoID, no todos ellos , quiero recuperar solo aquellos nodos que tienenpowersclave en ellos sin saber cuál es elvaluecorrespondiente.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
node12y luego compruebe cuál de los ID de auto tiene unakeyparticular. 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