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 tienenpowers
clave en ellos sin saber cuál es elvalue
correspondiente.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 unakey
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