Cloud Firestore - 将实时侦听器更新计数作为读取操作吗?

Bra*_*key 6 firebase google-cloud-firestore

说我正在听一个文件:

db.collection("cities").document("SF")
    .addSnapshotListener { documentSnapshot, error in
      guard let document = documentSnapshot else {
        print("Error fetching document: \(error!)")
        return
      }
      print("Current data: \(document.data())")
    }
Run Code Online (Sandbox Code Playgroud)

根据Firestore计费政策,每次更新数据都会计为读取操作,还是监听行为计数本身?

另外,我说我正在听一些文件:

db.collection("cities").whereField("state", isEqualTo: "CA")
    .addSnapshotListener { querySnapshot, error in
        guard let documents = querySnapshot?.documents else {
            print("Error fetching documents: \(error!)")
            return
        }
        let cities = documents.map { $0["name"]! }
        print("Current cities in CA: \(cities)")
    }
Run Code Online (Sandbox Code Playgroud)

我是否会立即对与查询匹配的所有文档或每个文档的每次更新 - 或两者兼而有之?

Gil*_*ert 9

听取的行为本身并不算作读取,但是每个查询至少收取一个文档.在定价页面的"最低查询费用"下:

对于您执行的每个查询,只读取一个文档的最低费用,即使查询未返回任何结果.

初始读取和更新都计算在内.但是,如果您在完成此操作后不久重新收听,则不会因为您上次收听后没有更改的文档而收取费用.目前这个短暂的门槛是30分钟.在"收听查询结果"下也是如此:

当您收听查询结果时,每次添加或更新结果集中的文档时,都需要为读取付费

此外,如果侦听器断开连接超过30分钟(例如,如果用户离线),则会向您收取读取费用,就好像您已发出全新查询一样.

  • 侦听查询结果并获得它们一次具有相同的计费行为。如果您调用 `get()` 一次,然后在不到 30 分钟内再次调用,并且值没有改变,您将不会为第二次获取付费。 (2认同)