Firebase. Как я могу фильтровать аналогично equalTo(), но вместо этого проверять, содержит ли оно значение?

Допустим, у меня есть эта база данных:

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

Если я использую это:

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

На самом деле он вернет только «Burned», хотя в базе данных есть BurnedFirebase. Это потому, что equalTo() не работает как метод, такой как contains().

Есть ли метод, аналогичный contains()? Если нет, есть ли обходной путь?


person Ali Bdeir    schedule 02.12.2016    source источник
comment
вы можете комбинировать методы startAt() и endAt(), чтобы ограничить результаты указанным диапазоном значений.   -  person Umar Ata    schedule 02.12.2016
comment
@UmarAta спасибо за эту ссылку. Но Фрэнк не приводит пример, и я не понимал, как я мог это сделать. Я думаю, чтобы помочь будущим посетителям, вы должны опубликовать пример, прежде чем мы закроем его как дубликат.   -  person Ali Bdeir    schedule 02.12.2016
comment
@UmarAta я просто использую startAt("myQueryText").endAt("myQueryText")?   -  person Ali Bdeir    schedule 02.12.2016


Ответы (1)


Если ваш поиск всегда находится в начале слова (вы не ищете ned и ожидаете появления Burned), вы можете использовать старший символ юникода:

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

Откуда: https://firebase.google.com/docs/database/admin/retrieve-data#range-queries

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

Символ , использованный в приведенном выше запросе, является очень высокой кодовой точкой в ​​диапазоне Unicode. Поскольку это после большинства обычных символов Юникода, запрос соответствует всем значениям, начинающимся с буквы b.

person Mathew Berg    schedule 02.12.2016