Как обойти базовый запрос firestore в моем сценарии - PullRequest
0 голосов
/ 30 мая 2018

У меня есть список документов, который выглядит как структура ниже.

Posts ->
  ->uuid_1
    -> approvedCount : 5
    -> postMsg : "Hello world 1"
    -> Timestamp : 1234567890
    -> userId : "user1"
  ->uuid_2
    -> approvedCount : 6
    -> postMsg : "Hello world 2"
    -> Timestamp : 1234567891
    -> userId : "user2"

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

условие -> approvedCount должно быть больше 5 при фильтрации в запросе.

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

Я пробовал что-то вроде

FirebaseUtil.getFireStoreDB("Posts").whereGreaterThan("approvedCount", 5)
                .limit(20)
                .orderBy("Timestamp", Query.Direction.ASCENDING)
                .get()

Но не поймите, как я буду получать следующие сообщения каждый день.Потому что из документов, которые я узнал, вы не можете запросить 2 поля с помощью <или>, иначе это будет проще с отметкой времени и утвержденного количества

1 Ответ

0 голосов
/ 30 мая 2018

Чтобы решить эту проблему, вам нужно использовать Разбиение данных с помощью курсоров запросов , в котором вы найдете очень полезный метод с именем startAfter(), в котором вы можете передать в качестве аргумента последний видимый элемент изdocumentSnapshots объект.Как и в официальной документации, вы должны использовать следующий код:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
// Construct query for first 20
Query first = rootRef.whereGreaterThan("approvedCount", 5)
                .orderBy("Timestamp", Query.Direction.ASCENDING)
                .limit(20);

first.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
    @Override
    public void onSuccess(QuerySnapshot documentSnapshots) {
        // Get the last visible document
        DocumentSnapshot lastVisible = documentSnapshots.getDocuments().get(documentSnapshots.size() - 1);

        // Construct a new query starting at this document, to get the next 20 records
        Query next = rootRef.whereGreaterThan("approvedCount", 5)
                .orderBy("Timestamp", Query.Direction.ASCENDING)
                .startAfter(lastVisible)
                .limit(20);

        // Do what you need to do with your query
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...