我知道,只要我打开监听器来查询 QUERY ,即使此查询不返回任何文档(因为没有适合该查询的文档,甚至如果自上次打开此监听器以来没有更改,但没有任何更改。
查询的最低费用 即使查询没有返回结果,对于您执行的每个查询,最低读取一个文档的费用。
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());
打开此侦听器时,我将为一读收费吗?
答案 0 :(得分:1)
打开此侦听器时,我将为一读收费吗?
不。如果打开正在侦听单个文档的侦听器,则由于该文档已存在于缓存中,因此完全无需付费。请记住,当一个查询不返回任何结果但您没有执行任何查询,而您只是在侦听文档更改时,您将承担阅读一份文档的责任。每次开始侦听更改或每次打开应用程序时,只负责阅读一份文档是没有意义的。这就是Firestore的优点,因为您拥有数据库的本地副本,所以除非对后端进行更改,否则无需为缓存的文档付费。