Как мне «отфильтровать» данные пожарного хранилища, удовлетворяющие условию «содержит»? - PullRequest
1 голос
/ 13 июля 2020

Я просто хочу получить данные по узлу

Query query = fireStore.collection("Requests").whereEqualTo("City",Noida);

этот запрос работает, когда узел City имеет точное значение ("Noida в данном случае"), но я хочу получить все данные, где "City" содержит требуемые данные

например: при City = Noida этот случай работает. Я хочу сделать

, когда City = Noida se c -32, и если я наберу Noida, он все равно будет искать Noida se c -32

Ответы [ 2 ]

1 голос
/ 28 июля 2020

В Firestore нет запроса, который запрашивал бы подстроки по вашему желанию.

Но есть обходной путь для небольших наборов данных, который заключается в запросе всех данных и сохранении в переменной (в вашем случае получение все названия городов) и используйте метод contains(), например:

Query query = fireStore.collection("Requests");
String str1 = document.getString("City");
String str2 = "Noida";
boolean b = str1.toLowerCase().contains(str2.toLowerCase());

И если вы напечатаете значение b, если оно совпадает, оно вернет true, если не false. Но приведенные выше примеры работают достаточно хорошо только для малых наборов данных, поскольку они неэффективны для больших наборов данных. В этом случае, как рекомендует официальная документация , вы можете включить полнотекстовый поиск данных Cloud Firestore с помощью сторонней поисковой службы, например Algolia .

1 голос
/ 23 июля 2020

Я не думаю, что вы можете реализовать это напрямую. Но я могу подсказать, как это сделать. Вы можете добавить в документ еще одно поле, например «сектор» , в котором вы можете сохранить пригород города.

Например. у вас могут быть city = "noida" и сектор = "сектор 32".

Таким образом, вы можете запросить город, а затем также получить сектор.

...