Операторы сравнения 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