Получить все документы Firestore после определенной даты - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь сделать следующее: у меня есть коллекция, в которую добавляются документы с отметкой времени. Затем я хочу прослушать эту коллекцию через snapshotlistener, но только для новых документов. Поэтому я обновляю свою метку времени до последней полученной метки документа и пытаюсь запросить только те документы, которые были новее моей метки времени. В onCreate я назначаю lastUpdateTime дату в прошлом, чтобы добавить первый документ.

val sdf = SimpleDateFormat("dd/MM/yyyy", Locale.US)
    try {
        lastUpdateTime = sdf.parse("01/01/2000")

    } catch (e: ParseException) {
       //
    }

затем я добавляю snapshotlistener и пытаюсь обновить lastUpdateTime, чтобы просто искать документы, более новые, чем эта дата / время

val path = //...path to my collection
private var lastUpdateTime = Any() //my up-to-date timestamp. I first assign it some date in the past, to make sure it gets the first document added.
// some code

talksListener = path.whereGreaterThan("timestamp", lastUpdateTime)
                .addSnapshotListener(EventListener<QuerySnapshot> { snapshot, e ->

                    if (snapshot != null && !snapshot.isEmpty && !snapshot.metadata.hasPendingWrites()) {                            

                        for (dSnapshot in snapshot) {
                            val thisTimestamp = dSnapshot.get("timestamp")    

                            if (thisTimestamp != null) {
                                lastUpdateTime = thisTimestamp
                            }  
                        }
                    }
                })

Но каждый раз, когда я добавляю документ, я снова получаю всю коллекцию. Я также перепробовал все комбинации с orderBy и startAt/endAt/startBefore/EndBefore, но результат тот же. Либо я ничего не получаю, либо вся коллекция каждый раз, когда добавляется новый документ. например:

talksListener = path.orderBy("timestamp").startAfter(lastUpdateTime)

Где здесь проблема? Также, с другой стороны, есть ли возможность включить !snapshot.metadata.hasPendingWrites() в запрос в Kotlin. документация говорит, что нужно использовать MetadataChanges.INCLUDE, но я не понимаю, как реализовать это в Kotlin. Каждый Намек очень ценится.

изменить 1: Моя база данных Firestore имеет следующую структуру:

users/{user}/messages/{message} -> here is the timestamp located

и мой путь ведет к ./messages

редактировать 2: Решение состоит в том, чтобы отсоединить и снова подключить прослушиватель после назначения нового lastUpdateTime. Это не звучит хорошо для меня, поэтому, если у кого-то есть лучшее решение, я буду рад его услышать. Пока же я буду придерживаться этого.

...