Как объединить запросы orderByKey () и orderByChild для разбивки отфильтрованных результатов? - PullRequest
0 голосов
/ 07 декабря 2018

Я работаю над проектом Angular, который обращается к базе данных Firebase Realtime через angularfire2.

У меня есть запросы, которые помогают мне избежать необходимости загружать весь узел для последующей фильтрации (поскольку мои узлы действительно тяжелые).

Например, для целей нумерации страниц я использую:

  getPaged(offset = 20, startKey?) {
    startKey = (startKey) ? startKey.toString() : '1542151974732';
    return this.angularFireDataBase.database.ref().child('forms/').orderByKey().startAt(startKey.toString()).limitToFirst(offset + 1);
  }

И для фильтрации по конкретному ключу / значению, которое я использую:

getForSupervisor(supervisor) {
    return this.angularFireDataBase.database.ref().child('forms/').orderByChild('user/uid').equalTo(supervisor);
}

Но теперь мне нужноЧтобы разбить на страницы уже отфильтрованные результаты, я попытался с:

  getForSupervisorPaged(supervisor, offset = 20, startKey?) {
    startKey = (startKey) ? startKey.toString() : '1542151974732';
    return this.angularFireDataBase.database.ref().child('forms/').orderByChild('user/uid').equalTo(supervisor).orderByKey().startAt(startKey.toString()).limitToFirst(offset + 1);
  }

Это дает мне эту ошибку:

Uncaught Ошибка: Query.orderByKey: Вы не можете объединить несколько вызовов orderBy.

Кроме того, я пробовал это:

  getForSupervisorPaged(supervisor, offset = 20, startKey?) {
    startKey = (startKey) ? startKey.toString() : '1542151974732';
    return this.angularFireDataBase.database.ref().child('forms/').orderByChild('user/uid').equalTo(supervisor).startAt(startKey.toString()).limitToFirst(offset + 1);
  }

И этот дает:

Uncaught Ошибка: Query.startAt: Начальная точка былауже установлено (с помощью другого вызова startAt или equalTo).

Как отфильтровать и страницу набора записей без необходимости загрузки всех записей?

...