想象一下我在flutter / dart中有以下伪代码:
Stream<List<T>> list() {
Query query = Firestore.instance.collection("items");
return query.snapshots().map((snapshot) {
return snapshot.documents.map((doc) {
return standardSerializers.deserializeWith(serializer, doc.data());
}).toList();
});
}
我正在听数据库中的“项目”的整个集合。为了简单起见,我们总共有10个文档,我一直在听更改。
我在代码中的某个地方收听此流。假设这个查询例如在第一次调用时返回所有10个“项目”。这算作10次读取,可以。如果我直接在Firestore Web界面(或其他位置)中修改了这些文档之一,则将触发监听器,即使我仅修改了一个文档,我的印象还包括另外10次读取。我检查了云项目的“用法”选项卡,并且对此表示怀疑。
是这种情况,即使为该查询只修改了一个文档,也要计数10个文档?
如果答案为是,那么下一个问题将是“想象我想对list()进行两次调用,一个调用为orderBy“ rating”,另一个调用为orderBy“ time”(随机属性),其中一个这些文档发生了变化,这意味着20次读取1次更新?”
我丢失了某些东西或者Firestore不适合我使用,或者我应该更改自己的体系结构,或者我算错了。
pubspec.yaml =>
firebase_database: ^4.0.0
firebase_auth: ^0.18.0+1
cloud_firestore: ^0.14.0+2
这可能适用于所有iOS和Android之类的环境,因为它本质上是一个更通用的“ firestore”问题,但是在flutter / dart中使用示例,因为如果与flutterfire插件有关,这就是我正在使用的示例
谢谢。
答案 0 :(得分:1)
否,如文档中所述:
当您收听查询[注意:(或集合或子集合)]的结果时,您需要付费阅读 每次添加或更新结果集中的文档。你是 从结果集中删除文档时,也会收取读取费用 因为文档已更改。 (相反,当文档是 删除,则无需支付阅读费用。)
此外,如果侦听器断开连接超过30分钟(对于 例如,如果用户离线),您将被收取以下费用: 如果您发出了全新的查询。 [注意:您的示例中有10个读物。]
第一季度的答案是“否”:-)
是的,请参阅this part of the doc,它解释了如何在查询快照之间捕获对查询结果的实际更改,而不是简单地使用整个查询快照。对于Flutter,您应该使用docChanges
属性。