当我开始在Firestore中收听单个文档时,即使文档没有更改,我也应该阅读一遍吗?

时间:2019-07-09 17:06:26

标签: firebase google-cloud-firestore

我知道,只要我打开监听器来查询 QUERY ,即使此查询不返回任何文档(因为没有适合该查询的文档,甚至如果自上次打开此监听器以来没有更改,但没有任何更改。

根据documentation

  

查询的最低费用   即使查询没有返回结果,对于您执行的每个查询,最低读取一个文档的费用。

Stream<QuerySnapshot> stream = Firestore().collection("someCollection").where("someField", isGreaterThan: 42).snapshots();
stream.listen((querySnapshot) => doSomething());

此外,我知道如果我使用简单的get来读取某些文档,只要该文档已存在于离线缓存中,我就不会收费, 并且未在Firestore中更改(根据Doug Stevenson)。

 DocumentSnapshot doc = await Firestore().collection("someCollection").document("documentID").get();

我的问题是:

假设文档已存在于我的脱机缓存中,并且此后在Firestore中未更改。

如果我不使用get,而是打开监听器DocumentSnapshot,而不是QuerySnapshot),如下所示:

Stream<DocumentSnapshot> stream = Firestore().collection("someCollection").document("documentID").snapshots();
stream.listen((documentSnapshot) => doSomething());

打开此侦听器时,我将为一读收费吗?

1 个答案:

答案 0 :(得分:1)

  

打开此侦听器时,我将为一读收费吗?

不。如果打开正在侦听单个文档的侦听器,则由于该文档已存在于缓存中,因此完全无需付费。请记住,当一个查询不返回任何结果但您没有执行任何查询,而您只是在侦听文档更改时,您将承担阅读一份文档的责任。每次开始侦听更改或每次打开应用程序时,只负责阅读一份文档是没有意义的。这就是Firestore的优点,因为您拥有数据库的本地副本,所以除非对后端进行更改,否则无需为缓存的文档付费。