Я работаю над мобильным приложением с флаттером, и я пытаюсь запросить из firebase список объектов, каждый объект из firebase имеет массив строк, который содержит категории объекта, а на флаттере у меня есть список строк, содержащих категории, которые я хочу просмотреть, я хотел бы запросить все объекты из firebase, которые содержат хотя бы 1 строку, присутствующую в массиве, который я выбрал из флаттера, но я еще не нашел способ сделать это, также я видел, что firebase ограничивает запросы 10 типами, но я мог бы захотеть иметь более 10 типов в моем массиве. Если бы кто-то мог мне помочь, было бы здорово, потому что я не знаю, с чего начать.
Выполнение:
Во-первых, это решение вашей проблемы.
Вам нужно использовать array-contains
. Пример:
final objectsRef = db.collection("objects");
final myCategoryObjects =
objectsRef .where("categories", arrayContains: "category1");
Подробнее об этом в этой ссылке документации.
Ограничение 10:
Обратите внимание, что ограничение в 10 не применяется в вашем случае, потому что вы ищете только 1 категорию.
Если вы хотите искать все объекты "категории 1" или "категории 2", то к вам будет применяться ограничение в 10. В этом случае у вас есть 2 решения:
1- выполните локальный фильтр в своем приложении (не в Firebase) или
2- добавить в Firestore новые поля, относящиеся к каждой категории отдельно. Например, поле 1 — это логическое значение «категория 1» (истина или ложь)... поле 2 — это логическое значение «категория 2» (истина или ложь) и т. д.
Дайте мне знать, если какие-либо последующие действия.
да, только если вы используете Stream...
но что, если мне нужно изменить массив категорий в реальном времени? будет ли поток обновляться соответственно?