在Firestore文档中说:
使用游标,页面令牌和限制没有额外的费用。实际上,这些功能可以通过仅读取您实际需要的文档来帮助您节省金钱。
但是以下查询产生80次读取:
val query = collection.orderBy("name")
query.limit(30).get(Source.SERVER).continueWithTask {
query.limit(20).get(Source.SERVER)
}.continueWith {
val doc = it.result!!.documents[5]
query.startAfter(doc).limit(30).get(Source.SERVER)
}
我希望第二次查询从与第一点相同的位置开始读取35次,并且仅读取已经通过第一次查询读取的20个文档。第三个查询从第5个文档开始,因此它将读取5个新文档。 同样,如果我多次运行任何此查询,则读取次数将增加,就像我只运行一次一样。 例如,如果我运行第一次查询5次,那么读取次数将仅增加30,而不是我期望的150。
此查询仅在限制方面有所不同,如文档所述,使用限制没有额外的费用。为什么他们禁止其他读取(在Firebase控制台的“使用”选项卡上)?也许不会收取此费用?
谢谢!
答案 0 :(得分:2)
如果我理解您的描述正确,则这是预期的行为。我在您的代码中算出了80次读取,因此我希望您可以为80次读取付费。请注意,.get
会立即触发读取,无论您是刚才还是在同一行/上一行都检索了相同文档。
val query = collection.orderBy("name")
query.limit(30).get(Source.SERVER).continueWithTask { <----- 30 reads triggered here
query.limit(20).get(Source.SERVER) <----- 20 reads triggered here
}.continueWith {
val doc = it.result!!.documents[5]
query.startAfter(doc).limit(30).get(Source.SERVER) <----- 30 reads triggered here
}
当然还有30 + 20 + 30 = 80。
是的,limit
在这里为您省钱,因为没有限制,那么每个.get()
都将读取馆藏中的所有文档。