Оператор SQL LIKE в Cloud Firestore?

Некоторое время я использую Firebase Real Time Fatabase, и сегодня я наткнулся на Cloud Firestore. Я не могу понять, как использовать оператор LIKE в Firestore.

База данных Firebase в реальном времени

ref.child('user').orderByChild('name').startAt(name).endAt(name+'\uf8ff')

В Cloud Firestore я пробовал

userRef.where('name', '>=', name); <br>
userRef.where('name', '<=', name);

Но не работает.


person Manjok    schedule 09.10.2017    source источник


Ответы (4)


Чтобы решить эту проблему, вам нужно изменить функцию orderByChild на orderBy. Поэтому используйте следующий код:

ref.collection('user').orderBy('name').startAt(name).endAt(name+'\uf8ff')
person Joan P.    schedule 12.03.2018
comment
это не работает, когда приложению требуется другой заказ By для разбивки на страницы вместе с .startAfter () и .endBefore (). мы не можем ожидать, что при использовании этого трюка нам придется деактивировать функцию разбивки на страницы, что неправильно. - person Elmira Behzad; 09.07.2020

Не существует эквивалента LIKE, но вы можете выполнять префиксную фильтрацию так же, как и в RTDB.

Написанный вами запрос такой же, как equals. Вам нужно проделать то же самое, и сделать чуть меньше <.

person Dan McGrath    schedule 09.10.2017
comment
См. Также совет, данный здесь: stackoverflow.com/questions/46568142/. Короче говоря, вы можете частично имитировать это, если заранее сегментируете слова, которые можете искать. - person Gil Gilbert; 10.10.2017

Такого оператора нет, разрешены ==, <, <=, >, >=. Здесь вы можете найти все ограничения запросов в облачном хранилище: https://firebase.google.com/docs/firestore/query-data/queries

person etrupja    schedule 14.03.2018

К вашему сведению: в более поздних версиях облачного хранилища (например, 0.12.5) методы startAt () и endAt () требуют списка строк, а не одной строки.

person kevinH    schedule 18.06.2019