Как избежать бесконечно составленных индексов в firestores

#json #performance #google-cloud-firestore #maps #structure

#json #Производительность #google-облако-firestore #Карты #структура

Вопрос:

Я занимаюсь социальными сетями, и в моих сообщениях у меня есть «теги» (которые практически бесконечны, поскольку их более 200), я хочу, чтобы мои пользователи фильтровали как теги, так и дату, например:

myRef.where(«tag» == «tagName»).OrderBy(‘date’, ‘asc’)

НО … у меня есть бесконечное количество тегов, которые повергают меня в шок, и я не мог справиться.

Должен ли я создавать пользовательскую карту с разделами размером 1 м??? Должен ли я создать пользовательский идентификатор с данными на нем??? Как я смогу смешивать данные asc с этими запросами или смешивать два или более типов вместе?

Ответ №1:

Для вашего запроса требуется индекс на tag date , а не на tagName date .

Но если вы хотите сохранить список тегов для каждого документа, вы захотите сохранить их в массиве, а затем использовать array-contains для проверки, есть ли у документа определенный тег. Чтобы узнать, tagName существует ли в массиве строковых значений tag , вы должны запросить:

 myRef.where("tag", "array-contains", "tagName").orderBy('date', 'asc')
  

Подробнее об этом смотрите в Улучшенных массивах в облачном Firestore!