执行由Flutter开发的Firestore-Test-App之后,我查看了Firestore分析以查看有多少请求由我的Test-App提出。它告诉我,从1次测试开始,我至少进行了20到60次文档读取。问题是,按照我的理解,该测试最多可读取1-3个结果。
我已经读过https://firebase.google.com/docs/firestore/pricing。它确实有助于理解firestore的记帐逻辑,但是按照本文中的逻辑,我应该最多读取5次。 此线程:Firestore - unexpected reads还建议,也许读取的文档来自打开的Firebase控制台,并查看文档。因此,我在测试前将其关闭,并在30分钟后将其打开。这并没有改变结果。我还设置了断点,并且代码只执行了一次。
我打开了一个全新的Flutter项目进行测试。 这是发出读取请求的唯一部分:
CollectionReference dbUsers = dbInstance.collection("Users");
var user = dbUsers
.where("docId", isEqualTo: fireAppUser.user.uid)
.limit(1)
.snapshots();
var _userSub = user.listen((value) {
if (value.documents.isNotEmpty && value.documents.first.data != null)
print(value.documents.first.data);
});
_userSub.cancel()
在我的Firestore规则下方,该规则目前处于默认设置。
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write;
}
}
}
我的数据库中正好有5个文档。
我希望最多读取5个文档。请帮助我理解为什么此代码段导致意外的读取次数。是什么原因造成的?
编辑:忘记将cancel()附加到代码段
答案 0 :(得分:0)
该代码可以进行几乎无限次的读取,因为它为文档添加了一个侦听器。首次运行时,它的读取费用为1;随着文档随着时间的推移而变化,随着侦听器的添加,它将继续引起读取。
如果您认为会计不合理,请contact Firebase support并附上确切的复制说明。