Как узнать, сколько элементов запрос Firestore вернет при реализации нумерации страниц - PullRequest
0 голосов
/ 20 июня 2019

Firestore имеет это руководство о том, как разбить запрос на страницы:

Firestore - Разбить данные с помощью курсоров запросов

Они показывают следующий пример:

Разбить запрос на страницы

Разбить запросы на страницы путем объединения курсоров запросов с помощью метода limit ().Например, используйте последний документ в пакете в качестве начала курсора для следующего пакета.

var first = db.collection("cities")
       .orderBy("population")
       .limit(25);

return first.get().then(function (documentSnapshots) {
 // Get the last visible document
 var lastVisible = documentSnapshots.docs[documentSnapshots.docs.length-1];
 console.log("last", lastVisible);

 // Construct a new query starting at this document,
 // get the next 25 cities.
 var next = db.collection("cities")
         .orderBy("population")
         .startAfter(lastVisible)
         .limit(25);
});

ВОПРОС

Я получаю пример, но как я могу узнать, сколько элементов (всего, без ограничения ограничений) этот запрос вернет?Мне понадобится это, чтобы вычислить количество страниц и управлять компонентом разбивки на страницы, не так ли?

Я не могу просто отображать кнопки «Вперед» и «Назад», не зная предела.

Какэто должно быть сделано?Я что-то упустил?

Ответы [ 2 ]

1 голос
/ 20 июня 2019

это невозможно, итератор не может знать, сколько документов он содержит, так как они извлекаются через поток gRPC.

Но есть обходной путь ... но вы должны сделать несколько вещей:

1) записать счетчик в документах Firebase, который вы увеличиваете или уменьшаете все, что делаете транзакцией

2) сохраняете счетчик в поле вашей новой записи, например position 10или что-то.

Затем вы создаете индекс для этого поля (позиция DESC).

Таким образом, вы можете сделать пропуск + предел с помощью where ("position", "<", N) .orderBy ("position", DESC) </p>

Это сложно, но делает свое дело

1 голос
/ 20 июня 2019

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

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