2016-12-23 1 views
0

ich eine Firebase Struktur haben, die wie folgt aussieht:Firebase queryEquals Nicht Rückgabe von Werten in Swift

- key1 
    -key2 
    -key3:value 
    -key4:value 
    -key5:value 
    -key6:value 

ich Aufzeichnungen zurück bin, wo key3 ‚s-Wert eine bestimmte Zeichenfolge entspricht.

let ref = FIRDatabase.database().reference() 
let path = "Object/key1/key2" 

ref.child(path).queryOrdered(byChild: "key3").queryEqual(toValue: "myvalue").observeSingleEvent(of: .value, with: {(snapshot) in 

Das obige gibt NULL zurück. Wenn ich die queryEqual entferne, werden alle Datensätze zurückgegeben. Ich habe dreifach überprüft, dass der "myvalue" sowohl in FB als auch im Call übereinstimmt.

Ich habe den FB Anruf in einer Schleife als key1 und key2 ändern. Am Ende möchte ich nur diese Datensätze (alles unter key2) nur zurückgegeben, wenn key3 gleich Wert ist, den ich in meiner queryEqual Anweisung sende.

Um die volle Rendite zu erhalten, siehe unten. Ich habe meinen tatsächlichen Rückgabeprozess auskommentiert, um nur über einen einfachen Druck zu überprüfen:

ref.child(path).queryOrdered(byChild: "key3").queryEqual(toValue: "mvValue").observeSingleEvent(of: .value, with: {(snapshot) in 

      for test in snapshot.children 
      { 
       print (test) 
      } 

      /*if let returnDict = snapshot.value as? NSDictionary 
      { 
       helperProtocol.firebaseDidReturn?(returnDict: returnDict, extraDict: extraDict, name:name) 
      } 
      else if let returnArray = snapshot.value as? NSArray 
      { 
       helperProtocol.firebaseDidReturn?(returnDict: ["array":returnArray], extraDict: extraDict, name:name) 
      } 
      else 
      { 
       helperProtocol.firebaseDidReturn?(returnDict: nil, extraDict: extraDict, name:name) 
      }*/ 
     }) 
+0

Geben Sie Ihren Code ein, der versucht, die Antwort vom FB abzurufen. Ich frage mich, ob Sie den Antwortcode nicht an der richtigen Stelle platzieren. –

+0

Gegeben, dass ich die Antwort bekomme, wenn ich den Gleichheits-Check heraushole und ich denke nicht, dass das das Problem ist. Die Rückgabe sollte nicht unterschiedlich sein, ob die Gleichheitsprüfung vorhanden ist oder nicht. Allerdings oben in Update veröffentlicht. – C6Silver

Antwort

0

Das Problem war die Tiefe des Abfragepfads. Aus der oben war ich mit:

let path = "Object/key1/key2" 

Der Weg sein muß:

let path = "Object/key1" 

Also auch wenn der Suchschlüssel (key3) unter key2 wird, ist der Ansatz, eine Ebene höher zu gehen, wie gezeigt über.

Verwandte Themen