Cloud Firestore查询定价

时间:2019-03-22 13:50:50

标签: firebase google-cloud-firestore

在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控制台的“使用”选项卡上)?也许不会收取此费用?

谢谢!

1 个答案:

答案 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()都将读取馆藏中的所有文档。