2016-06-03 10 views
0

Ich möchte prüfen, ob ein Objekt mit einer bestimmten Eigenschaft auf einem Wert vorhanden ist.Überprüfen Sie, ob in Firebase ein Objekt mit einer bestimmten Abfrage vorhanden ist.

Hier ist ein Beispiel, was auf Firebase meine Daten aussehen könnte:

object: { 
    object-one: { 
    id: "something" 
    } 
} 

Und nun möchte ich ein Objekt mit einer ID holen, der nicht existiert:

let objectsRef = FIRDatabase.database().reference().child("object") 
let query = objectsRef.queryOrderedByChild("id").queryEqualToValue("something else") 

query.observeSingleEventOfType(.Value, withBlock: { (snapshot) in 
    // Never get's called 
}) 

Da es ist kein Eintrag mit id = "something else" der Abschluss wird nie aufgerufen werden. Aber wie soll ich wissen, ob es nicht wegen Internetproblemen aufgerufen wird oder nur weil dieses Objekt wirklich nicht existiert?!?

+0

Wissen Sie immer den Objekt-Eins-Schlüssel? versuchen, mehrere Artikel zu erhalten, die mit diesem Wert übereinstimmen? Oder nur einen? – Ymmanuel

+0

Grundsätzlich würde ich gerne wissen, dass es mindestens einen Artikel mit einer bestimmten ID gibt. Die ID wäre die UID des angemeldeten Benutzers – Georg

+1

Ich habe gerade q Quick-Test, das '.Value'-Ereignis feuert für mich auf einem nicht vorhandenen Knoten. In diesem Fall ist 'snapshot.exists()' falsch. Sind Sie sicher, dass Sie Leseberechtigung haben? Siehe http://stackoverflow.com/questions/37403954/the-read-failed-permission-denied-error-in-firebase/37404053#37404053 –

Antwort

1

können Sie valueEventListner verwenden. Er ruft die aktuellen Daten ab und wartet auf weitere Aktualisierungen. Falls die Daten nicht vorhanden sind, gibt dataSnapshot.exists() false zurück.

z.B. Meine Datenbank enthält eine Liste von Benutzerobjekten, wobei emailId eines der Felder in jedem Benutzerobjekt ist.

[ 
    user1: {emailId: [email protected]}, 
    user2: {emailId: [email protected]} 
] 

Ich kann nach E-Mail-ID-Feld suchen und überprüfen, ob dieser Benutzer vorhanden ist oder nicht.

ref.orderByChild("emailId").equalTo("[email protected]").addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       System.out.println(dataSnapshot.exists());//false, if values is not present 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 
Verwandte Themen