Почему для моего запроса Firestore требуется этот конкретный порядок полей индекса?

#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, вы можете использовать его, поскольку он может изменить == условия. Я не совсем уверен, что он это делает, поэтому не будет публиковать ответ.