首页 > 解决方案 > 查询会在任何更改时触发还是仅在结果更改时触发?

问题描述

我想知道您收听的Cloud Firestore查询是否会针对该集合的每次更改或仅当该特定查询 的结果发生更改时触发。

我主要对cloud_firestoreFlutter 插件的行为感兴趣,但是,我假设这是由后端的 Cloud Firestore 处理的。

说,我有以下查询:

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

这应该只返回特定用户的最高分

我想知道Stream返回的 fromsnapshots是否会因集合中的任何更改而触发,例如,当为用户添加较低分数时,或者仅当结果发生更改时,即为该用户添加更高分数时。

标签: firebaseflutterdartgoogle-cloud-firestore

解决方案


通过实证研究,我发现了以下几点:

  • 无论是否存在匹配,查询都会返回一个结果,即当用户在该集合中没有文档时也是如此。

  • 之后,它只会在结果发生变化时触发,即当该查询返回的文档不同时。
    这是在查询已经在收听时为该用户添加第一个分数、在收听时删除最高分数并向查询添加更高分数的情况。
    因此, 的数量DocumentChange将是12

该查询将完全忽略任何添加或删除的不影响结果的文档。为了扩展实时收听,这也是强制性的。

此外,文档somwhat证实了这一点。不清楚文章开头的“内容更改”或-query 部分中where哪些文档(添加、删除或修改)是什么意思。但是,可以假设仅表示重要的文档和内容,我的测试已经证实了这一点。


推荐阅读