Cloud Firestore实时监听器单文档变更时会计7次读取吗?
问题:Firestore监听单个文档变更时的读取计数疑问
我在代码中设置了一个监听7个文档的Firestore监听器,代码如下:
Firestore.firestore() .collection(FirestorePaths.days) .whereField(DayKeys.date, in: CalendarService.shared.currentWeek) .whereField(DayKeys.fieldId, isEqualTo: "JAfWuBindnh4jIfsVGh4Vl3AvfU2") .addSnapshotListener { querySnapshot, error in if let error = error { print(error) return } querySnapshot?.documentChanges.forEach { diff in if (diff.type == .added) { print("New day: \(diff.document.data())") } if (diff.type == .modified) { print("Modified day: \(diff.document.data())") } if (diff.type == .removed) { print("Removed day: \(diff.document.data())") } } _ = querySnapshot?.documents.compactMap { print($0.metadata.isFromCache ? "Cache" : "Server") } }
当服务器端有一个文档发生变更时,我得到如下输出:
Modified day ... Server Server Server Server Server Server Server
我想知道这种情况会被计为7次读取还是仅1次读取?
回答
- 这种情况只会被计为1次读取,而非7次。
- Firestore的实时监听计费逻辑是:初始建立监听时,会按查询匹配到的文档数量(这里是7个)收取对应次数的读取费用;但后续当只有单个文档变更时,仅针对发生变更的那一个文档收取1次读取费用。
- 你看到快照返回所有7个文档(对应7条Server日志)是Firestore的默认行为——变更触发的快照会返回当前查询的完整结果集,但计费只统计实际发生变更的文档,不会重复收取未变更文档的读取费用。
内容的提问来源于stack exchange,提问作者Sipan Hazim
相关产品推荐
相关产品推荐

