Query Page 2 Firestore / Pagination - PullRequest
       9

Query Page 2 Firestore / Pagination

0 голосов
/ 27 сентября 2018

Я использую firestore для проекта электронной коммерции, над которым я работаю.

Мой вопрос заключается в том, как бы я мог запросить страницу 2 напрямую, если пользователь попадет на нее.

У меня 48 товаров натеперь на каждой странице мне нужны документы с номерами от 49 до 97.

Как?

Я получаю целую вещь о нумерации страниц https://firebase.google.com/docs/firestore/query-data/query-cursors

с помощью startAfter и все, но как вы это сделаете, если человек непосредственно попадает на страницу 2, и я хочу документы с 49 по 97 втекущая сортировка.Поместить число в документ не вариант, потому что если он приземлится со вторым параметром color = red & page = 2 сбоку.Также я не могу использовать startAfter, потому что я не знаю документа до номера 49.

это возможно даже в пожарном депо?

1 Ответ

0 голосов
/ 28 сентября 2018

Так как Firestore SDK не имеет возможности начать запрос с определенной страницы, единственный способ сделать это:последняя на каждой странице.

Вы получаете все необходимые данные, сортируете их и получаете нужные документы.

Пример кода для решения №.1:

//Taken from Firebase code example in the link
Query page = db.collection("cities")
    .orderBy("population")
    .limit(25);

List<DocumentSnapshot> desiredList;

//Looping through each pages, start from the first one
for (int page = 1; page <= desiredPage; page++) {
    page.get()
       .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
        @Override
        public void onSuccess(QuerySnapshot documentSnapshots) {
            desiredList = documentSnapshots.getDocuments();

            //This will be ignored if already the last page
            DocumentSnapshot lastPage = desiredList
                  .get(documentSnapshots.size() -1);
            page = db.collection("cities")
                     .orderBy("population")
                     .startAfter(lastPage)
                     .limit(25);
        }
     });
} 

Образец для раствора №.2:

//Taken from Firebase code example in the link
Query allPages = db.collection("cities")
    .orderBy("population")
    .limit(25 * desiredPage);

//Looping through each pages, start from the first one
allPages.get()
     .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
        @Override
        public void onSuccess(QuerySnapshot documentSnapshots) {
            //Retrieve only documents from no. something to something
            List<DocumentSnapshot> desiredDocuments = documentSnapshots
                 .getDocuments().subList(25 * (desiredPage - 1), desiredPage * 25);
        }
     });

(может быть, будет такая функция, или startAtPage() что-то в этом роде) Пока я предпочитаю решение нет.2 для простоты, но у каждого разработчика есть свои предпочтения.

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