Firestore请求产生意外的读取次数

时间:2019-09-18 06:56:42

标签: firebase flutter dart google-cloud-firestore

执行由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()附加到代码段

1 个答案:

答案 0 :(得分:0)

该代码可以进行几乎无限次的读取,因为它为文档添加了一个侦听器。首次运行时,它的读取费用为1;随着文档随着时间的推移而变化,随着侦听器的添加,它将继续引起读取。

如果您认为会计不合理,请contact Firebase support并附上确切的复制说明。