Я изо всех сил пытаюсь найти хороший материал о передовых методах фильтрации данных с помощью firebase firestore.Я хочу отфильтровать свои данные на основе категорий, выбранных пользователем.У меня есть коллекция документов, хранящихся в моей базе данных пожарного магазина, и у каждого документа есть массив, в котором есть все соответствующие категории для этого отдельного документа.Ради фильтрации я держу локальный массив с предпочтительными для пользователя категориями.Все, что я хочу сделать, это отфильтровать данные по предпочтительным категориям пользователя.
поле категорий пожарного магазина
учтите, что предпочтительные категории пользователя хранятся в виде массиваstrings (["Film", "Music"]). Я планировал использовать метод 'array-includes' в firestore, например
db.collection(collectioname)
.where('categoriesArray', 'array-contains', ["Film", "Music"])
Позже я обнаружил, что не могу использовать 'array-contains'по отношению к самому массиву, и после изучения этой проблемы я решил изменить свою структуру данных, как указано здесь .
категории изменены на Map
После того, как я изменил категории с массива на карту, я подумал, что мог бы использовать несколько условий, чтобы фильтровать документы
let query = db.collection(collectionName)
.where(somefield, '==', true)
this.props.data.filterCategories.forEach((val) => {
query = query.where(`categories.${val}`, '==', true);
});
query = query
.orderBy(someOtherField, "desc")
.limit(itemsPerPage)
const snapshot = await query.get()
Теперь задача № 2, firebase требует добавления индексов для составных запросов.Категории, которые я сохранил в каждом документе, являются динамическими, и я не могу заранее добавить эти индексы.Каково было бы идеальное решение в таких случаях?Любая помощь будет принята с благодарностью.