查询是否在任何更改时或仅在结果更改时被触发?

时间:2019-07-10 07:01:44

标签: firebase flutter dart google-cloud-firestore

我想知道您听到的 Cloud Firestore 查询是否会针对该集合的每次更改触发,或者只是在该查询的结果触发时触发具体查询更改。

我主要对cloud_firestore Flutter plugin的行为感兴趣,但是,我认为这是由Cloud Firestore在后端处理的。

说,我有以下查询:

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

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

我想知道Stream returned from snapshots是否会因集合中的任何更改而触发,例如当为用户添加较低的分数时,或者只是在结果更改时,即为此用户添加较高的分数。

1 个答案:

答案 0 :(得分:0)

通过实证研究,我发现了以下内容:

  • 该查询将最初返回一个结果,即是否存在匹配项,即当用户在该集合中没有文档时。

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

查询将完全忽略添加或删除的所有不影响结果的文档。为了扩展实时收听,这也是必需的。

此外,文档 somwhat 对此进行了确认。目前尚不清楚"contents change" at the beginning of the article是什么意思,in the where-query section是什么意思(添加,删除或修改的)。但是,可以假定,只有经过测试证明的重要文件和内容才有意义。