Операторы сравнения Firestore - содержит, не содержит, начинается с
Из документации "... Метод where() принимает три параметра: поле для фильтрации, операцию сравнения и значение. Сравнение может быть <, < =, ==, > или > =..."
Запросами, которые нам нужно выполнить, являются:
- equals (==)
- не равно (???)
- меньше (<)
- больше, чем ( > )
- меньше или равно (< =)
- больше или равно ( > =)
- содержит (???)
- не содержит (???)
- начинается с (???)
В этом question предлагается реализовать полнотекстовый поиск, такой как Elastic или Algolia. Мне не нужен полный текстовый поиск. Мне просто нужны эти основные операторы для поиска в номинированных полях. Но большая проблема заключается в том, что мое приложение отключено в течение значительных периодов времени, и мы кэшируем данные, которые нам нужны в автономном режиме, а автономный полнотекстовый поиск не является вариантом (кроме случаев, когда вы получаете Enterprise ($$ $$$$) лицензии Algolia - но все же кажется излишним для того, что мы ищем).
У любого из вас есть какие-либо решения для того, где ( "FIELD", "???", "string" ), когда "???" "не равно", "содержит", "не содержит" или "начинается с"?
Любые идеи с благодарностью оценили.
Ответы
Ответ 1
В Cloud Firestore нет встроенных "содержит", "не содержит", "начинается с" или "заканчивается" запросами.
Вы можете приблизить очень ограниченный запрос "начинается с", используя <
и >
, однако:
// All names starting with "Sa"
db.collection("people")
.where("name", ">", "Sa")
.where("name", "<", "Saz")
Ответ 2
В Firestore добавлен оператор запроса "массив содержит". Теперь это означает, что мы можем сохранить деконволюцию версии поля в виде массива подстрок, а затем использовать оператор "массив-содержащий". Увидеть:
https://github.com/googleapis/nodejs-firestore/releases/tag/v0.16.0