2016-06-09 6 views
1

Ich versuche, meine Daten abzufragen, um eine Liste von Elementen abzurufen, die alphabetisch sortiert sind und nach den als "sichtbar" markierten Elementen gefiltert werden.Firebase-Abfrage mit. equalTo (boolescher Wert, String-Schlüssel) funktioniert nicht

Hier ist meine Datenstruktur.

listItems 
    list_1_uid 
     item_1_uid 
      name: "Item 01" 
      nameLowercase: "item 01" 
      visible: true 
     item_2_uid 
      name: "zItem 02" 
      nameLowercase: "zitem 02" 
      visible: false 
     item_3_uid 
      name: "aItem 03" 
      nameLowercase: "aitem 03" 
      visible: true 

Hier ist meine Abfrage.

mQuery = mFirebaseDbReference 
    .child("listItems") 
    .child("list_1_uid") 
    .orderByChild("nameLowercase") 
    .equalTo(true, "visible"); 

Meine Abfrage gibt keine Daten zurück. Wenn ich die Anweisung .equalTo (true, "visible") lösche, gibt die Abfrage meine gesamte alphabetische Liste zurück.

Haben Sie Vorschläge, wie Sie meine gefilterte Liste abrufen können?

Antwort

2

Abfragen in Firebase sind an die Eigenschaft gebunden, die im orderBy Aufruf angegeben ist. Daher bezieht sich der Aufruf equalTo(boolean value, String key) in diesem Beispiel auf nameLowercase, so dass alle Elemente mit nameLowercase, die auf true festgelegt sind, abgefragt werden. Der zweite Parameter bezieht sich auf den Schlüssel des Elements (z. B. item_1_uid) und kann verwendet werden, um einen Startpunkt in der Abfrage anzugeben. Dies ist nützlich, um beispielsweise die Ergebnisse zu paginieren.

Da es keine Begrenzung für diese Abfrage ist, eine Lösung wäre, eine Abfrage zu verwenden, die Aufträge von „sichtbar“ und führen Sie dann eine zusätzliche Sortierung auf nameLowercase Client-Seite mit dem Endergebnis:

mQuery = mFirebaseDbReference 
    .child("listItems") 
    .child("list_1_uid") 
    .orderByChild("visible") 
    .equalTo(true); 
Verwandte Themen