2016-12-02 2 views
0

Lassen Sie uns sagen, ich habe diese Datenbank:Firebase - Wie kann ich ähnlich wie equalTo() filtern, aber prüfen, ob es den Wert enthält?

J-DSKFJASKDFJASKDJ:{ 
    username: "Burned" 
}, 
J-KASDJFAKSDJFKDSJ:{ 
    username: "BurnedFirebase" 
}, 
J-DFJKADSJFAKSDJFK:{ 
    username: "FirbaseFilteringIsVeryLackingThereforItSucks" 
} 

Wenn ich diese verwenden:

Query q = database.orderByChild("username").equalTo("Burned"); 

Es wird eigentlich nur zurück "Burned", obwohl es eine BurnedFirebase in der Datenbank ist. Das liegt daran, dass equalTo() nicht als Methode wie funktioniert.

Gibt es eine ähnliche Methode wie ? Wenn nicht, gibt es einen Workaround?

+1

Sie können die Methoden startAt() und endAt() kombinieren, um die Ergebnisse auf einen bestimmten Wertebereich zu beschränken. –

+0

@UmarAta danke für diesen Link. Aber Frank liefert kein Beispiel und ich habe nicht verstanden, wie ich das machen könnte. Ich denke, um künftigen Besuchern zu helfen, sollten Sie ein Beispiel veröffentlichen, bevor wir es als ein Duplikat schließen. –

+0

@UmarAta benutze ich einfach 'startAt (" myQueryText "). EndAt (" myQueryText ")'? –

Antwort

1

Wenn die Suche immer am Anfang des Wortes ist (Sie sind nicht für ned suchen und Verbrannte erwartung zu kommen), können Sie ein hohes Unicode-Zeichen verwenden:

query.startAt("Burned").endAt("Burned\uf8ff") 

Von: https://firebase.google.com/docs/database/admin/retrieve-data#range-queries

...dinosaursRef.orderByKey().startAt("b").endAt("b\uf8ff")... 

die \ uf8ff Zeichen in der Abfrage verwendet oben ist ein sehr hoher Codepunkt im Unicode-Bereich. Da es nach den meisten regulären Zeichen in Unicode ist, stimmt die Abfrage mit allen Werten überein, die mit einem b beginnen.

Verwandte Themen