Создание индексации для динамического пути с аннотированными точками в firestore [Wildcard]?
Моя коллекция создана как показано ниже:
-products
-productID
-category [object]
catitem1 - boolean
catitem2 - boolean
Теперь я написал запрос, как показано ниже
this.afs.collection<Product>('products', ref =>
ref
.where(`category.${categoryName}`, '==', true)
.limit(limit)
);
Этот запрос работает нормально, но когда я добавляю orderBy к вышеуказанному запросу, меня просят создать index
для запроса.
this.afs.collection<Product>('products', ref =>
ref
.where(`category.${categoryName}`, '==', true)
.orderBy('createdDate','desc')
.limit(limit)
);
Так как categoryName
может быть создан и может быть изменен в любое время, я должен добавить индексацию для каждого categoryName, который будет в сотнях.
Есть ли способ, где я могу создать подстановочный знак для category.categoryName
?
Я пытался с помощью category.*
но это не приемлемо Надеюсь найти помощь здесь.
1 ответ
Поскольку этот вопрос был задан, Firestore реализовал различные операторы, чтобы помочь с запросом членства в массиве . На момент написания статьи доступны следующие операторы:
array-contains
,
array-contains-any
,
in
, а также
not-in
.
Вместо хранения
category
как
object
с
Boolean
собственность для каждого
categoryName
, ты мог бы иметь
categories
массив, содержащий
толькоString
имена (или, если вы хотите сэкономить место,
Int
ids) категорий, членом которых является продукт.
Тогда запрос мог бы работать следующим образом, что потребовало бы только одного индекса:
this.afs.collection<Product>('products', ref =>
ref
.where('categories', 'array-contains', categoryName)
.orderBy('createdDate','desc')
.limit(limit)
);