Запускаются ли запросы при каких-либо изменениях или только когда меняется их результат? - PullRequest
0 голосов
/ 10 июля 2019

Мне было интересно, будут ли Cloud Firestore запросов, которые вы слушаете, запускаться при каждом изменении этой коллекции или только когда результат этого конкретного запроса изменяется,

В основном меня интересует поведение плагина cloud_firestore Flutter , однако я бы предположил, что это обрабатывается Cloud Firestore в серверной части.

Скажем, у меня есть следующий запрос:

Firestore.instance
        .collection('scores')
        .where('uid', isEqualTo: uid)
        .orderBy('score', descending: true)
        .limit(1)
        .snapshots();

Это должно вернуть наивысший балл для конкретного пользователя .

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

1 Ответ

0 голосов
/ 10 июля 2019

Благодаря эмпирическим исследованиям я обнаружил следующее:

  • Запрос вернет результат первоначально независимо от того, есть совпадения или нет, т. Е. Также, когда у пользователя нет документов в этой коллекции.

  • После этого он будет только запускать , когда результат изменится , т. Е. Когда документы, возвращенные этим запросом, будут другими.
    Это случай добавления первой оценки для этого пользователя, когда запрос уже прослушивается, удаления самой высокой оценки во время прослушивания и добавления более высокой оценки в запрос.
    Следовательно, число DocumentChange будет либо 1, либо 2.

Запрос полностью игнорирует любые добавленные или удаленные документы, которые не влияют на результат. Это также обязательно для масштабирования прослушивания в реальном времени.

Более того, документация что-то подтверждает это. Не совсем понятно, что «изменение содержимого» в начале статьи или какие документы (которые добавлены, удалены или изменены) имеют в виду в разделе where -запрос предназначены. Тем не менее, можно предположить, что подразумевается только тот документ и контент, которые имеют значение, что подтвердил мой тест.

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