Firestore (javascript sdk) - получает только новые данные (не просто добавляя) - PullRequest
0 голосов
/ 24 марта 2020

Я использую Firestore с веб javascript SDK. Предположим следующую схему:

Пользователь Do c -> Коллекция друзей

Я хочу знать, когда кто-то изменяет / удаляет / добавляет данные к нему.

так, что я написал что-то вроде этого:

friendsCollectionRef.onSnapshot(snapshot => {
    snapshot.docChanges().forEach(change => {
        onChange(change);
    });
});

Проблема в том, что всякий раз, когда я обновляю sh страницу, он продолжает вызывать onChange с данными, которые были обновлены в моем последнем сеансе. Есть ли способ получать только НОВЫЕ данные, а не задним числом?

Я бы хотел избежать хранения поля «LastUpdate» для всего. Это, конечно, не следует делать на стороне клиента, потому что тогда я заплачу за сеть, которую я никогда не буду использовать. Так что хранение логического значения isFirstCall исключено.

1 Ответ

0 голосов
/ 24 марта 2020

Как объяснено в do c, когда вы слушаете несколько документов в коллекции с помощью метода onSnapshot():

Первый снимок запроса содержит добавленные события для всех существующих документов, соответствующих запросу. Это потому, что вы получаете набор изменений, которые обновляют ваш моментальный снимок запроса с начальным состоянием запроса.

Так что каждый раз, когда вы обновляете sh вашу страницу, вы снова вызываете onSnapshot() метод "с нуля", и поэтому вы получаете первый снимок запроса со всеми документами коллекции.

Другими словами, я думаю, вам придется реализовать свой "домашний" механизм, чтобы получать только документы Вы хотите (вероятно, поле «LastUpdate» ...).

Вас может заинтересовать этот SO ответ , который показывает, как добавить отметку времени createdAt в документ Firestore через Облачная функция. Вы можете легко адаптировать его для записи последнего обновления. Было бы сложнее, если вы хотите обнаружить документы, которые были удалены с момента последней выборки.

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