Firebase — Невозможно сортировать и фильтровать данные одновременно

#javascript #firebase #react-native #google-cloud-firestore

#javascript #firebase #react-native #google-облако-firestore

Вопрос:

Я использую Firestore в качестве своей базы данных. Я хочу отфильтровать свои данные с помощью одной переменной, а затем упорядочить их в хронологическом порядке, используя вторую переменную.

Мой код, чтобы попытаться достичь этого, следующий:

 firebase.firestore().collection('supervisorRequests')
  .where("supervisor", "==", this.props.currentUID)
  .orderBy("postDate", "desc")
  

Для приведенного выше кода я получаю следующий вывод:

Firestore: Операция была отклонена, поскольку система не находится в состоянии, необходимом для выполнения операции.(firestore / сбой -предварительное условие)

Если я удалю либо .orderBy либо .where из запроса, проблема исчезнет.

В чем причина проблемы? Почему я не могу использовать оба «фильтра»? Как я могу получить данные так, как я их запрашивал, и избежать необходимости сортировать их вручную с моей стороны?

Ответ №1:

Иногда у меня возникает ошибка такого рода в вашей ситуации: выполнение orderby в поле и выполнение where в другом поле.

Попытка решения, которое работает для меня (с использованием Android Studio), заключается в создании индекса. Чтобы узнать относительную ссылку на этот конкретный индекс в терминале, я использую эту команду :

 adb logcat
  

Это покажет вам журнал. Вы можете отменить эту команду с помощью «crtl c», а затем прокрутить немного вверх, где вы увидите точную ссылку для использования. Вы копируете эту ссылку и вставляете ее в браузер. Но сначала вы должны пройти аутентификацию в своей консоли firebase. И затем появится модальное сообщение с запросом, хотите ли вы создать этот индекс: вы принимаете.

Или, если вы хотите, вы можете вручную создать этот индекс непосредственно в консоли firebase. Управление индексами в облачном Firestore