#firebase #google-cloud-firestore
#firebase #google-cloud-firestore
Вопрос:
У меня есть этот запрос в Firestore:
const query = await firestore.collection(`/records`)
.where("targetId", "==", someId)
.where("location", "==", someLocation)
.where("dayCode", ">=", domeDay);
При запуске запрашивается индекс: location ASC, targetId ASC, dayCode ASC
У меня уже есть тот же индекс, но с полями в другом порядке, поэтому, чтобы попытаться использовать его повторно, я переупорядочиваю свой запрос, но он по-прежнему запрашивает тот же конкретный порядок.
Почему этот запрос требует такого конкретного упорядочения полей индекса?
Комментарии:
1. Пожалуйста, поделитесь своими данными Firestore и конфигурацией индекса. Более того, я бы попробовал использовать
firestore.collection('records')
(без ведущего/
).2. Спасибо за ваш комментарий. Для ясности: у меня нет проблем с запросом, он работает хорошо, индекс тоже. Я спрашиваю, почему индексу нужен этот конкретный порядок:
location, targetId, dayCode
, а неtargetId, location, dayCode
3. Какой конкретный индекс у вас уже есть, который, как вы ожидаете, Firestore будет использовать для выполнения этого запроса?
4. @FrankvanPuffelen: ранее у меня был
targetId Ascending dayCode Ascending location Ascending
5. Этого индекса будет недостаточно. По сути: Firestore должен иметь индекс, в котором он может найти начальную точку результатов с помощью немедленного поиска (без сканирования индекса), и где затем он может возвращать результаты в виде единого потока из этого начального местоположения. Поэтому вам обязательно понадобится индекс, который
dayCode
находится там последним, поскольку у вас есть условие диапазона для этого. Если у вас есть индекс вlocation, targetId, location, dayCode ASC
Firestore, вы можете использовать его, поскольку он может изменить==
условия. Я не совсем уверен, что он это делает, поэтому не будет публиковать ответ.