Как исправить Uncaught Error в onSnapshot: FirebaseError: Для запроса требуется индекс. на динамическую сортировку? - PullRequest
2 голосов
/ 15 октября 2019

У меня есть запрос, в котором я запрашиваю в порядке desc, используя следующее

  const { id } = userDetails;
  const initialQuery = await firestore().collection('class')
    .orderBy('createdAt', 'desc')
    .where(`access.readAccess.${id}`, '==', true)
    .limit(5);
  initialQuery.onSnapshot((documentSnapshots) => {
    const { docs } = documentSnapshots;
    const lastVisible = docs.length > 0 ? docs[docs.length - 1] : '';
    console.log(docs);
  })
const getMore = async(store, userDetails) => {
  const { id } = userDetails;
  const { lastVisible } = lastState;
  const initialQuery = await firestore().collection('class')
    .orderBy('createdAt', 'desc')
    .where(`access.readAccess.${id}`, '==', true).startAfter(lastVisible)
    .limit(5);
  const documentSnapshots = await initialQuery.get();
  const { docs } = documentSnapshots;
}

. Когда я делаю это, я получаю ошибку The query requires an index, которая кажется справедливой и полезной. URL для создания индексации. Когда я создаю индексацию, она создает индексирование

class
access.readAccess.`1571158795762` Ascending createdAt Descending
Collection
Enabled

Теперь в этом 1571158795762 будет меняться в зависимости от пользователя, вошедшего в систему. Поэтому, конечно, он начал жаловаться на другого пользователя. Кроме того, onSnapshot поступают вызовы с порядком desc. Любое предложение, пожалуйста?

1 Ответ

1 голос
/ 15 октября 2019

Индекс Cloud Firestore должен знать обо всех определенных полях, участвующих в запросе. Вот как это может оптимизировать запрос. Если одно из ваших полей запроса имеет динамическое имя, например, access.readAccess.${id}, тогда этот тип запроса не очень подходит для Firestore.

Единственный способ обойти это - реструктурировать данные таким образом, чтобысовместим с требованиями Firestore для индекса. Поскольку у нас нет хорошего представления о данных, которые вы пытаетесь сохранить, на самом деле невозможно дать рабочее предложение. Но я скажу, что перемещение идентификаторов в список и проверка этого списка на наличие идентификатора в запросе может быть полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...