Firestore读取的数据计数与文档查询计数不匹配

时间:2020-10-05 08:33:27

标签: angular typescript firebase google-cloud-firestore

尝试计算和计算Firestore读取计数时遇到了一些问题。即使只有大约15个用户文档,firestore的读取计数始终以非常高的速度激增(每次我重新加载页面时,计数都会递增100)。即使当我不重新加载页面时,firestore读取计数本身也会增加,这是由于订阅行为导致读取数据操作不时刷新吗? (我读过一些文章,建议用户仅一次提取数据就使用“一次”。)

以下是代码段(ts):

  // All buddy users from Firebase
  private usersCollection: AngularFirestoreCollection<Profile>;
  users: Observable<Profile[]>;
  usersFirebase: Profile[] = [];

getUserDataFromFirebase() {
  this.isImageLoading = false;
  this.users.subscribe(async results => {
      var ref;
      for(let result of results) {
        if(result.imageName) {
          ref = this.store.ref('images/' + result.userId + '/profiles/' + result.imageName);
        } else {
          // Get default image is image not existing
          ref = this.store.ref('images/ironman.jpg');
        }
  
        await ref.getDownloadURL().toPromise().then(urlString => {
          result.profileURL = urlString;
          // Change availibility date from timestamp to date format
          try {
            result.availability = this.datePipe.transform(result.availability.toDate(), 'yyyy-MM-dd');
          } catch (error) {}
          result.flip = 'inactive';


            if(result.identity == 'Tenant')
            {
              this.usersFirebase.push(result);
            }
            return new Promise((resolve, reject) => {
                resolve();
              })
        });
      }
      console.log(this.usersFirebase);
    });
  }

firestore读取计数是如何工作的,计数的增加是否基于文档查询,它会在一定时间后继续自行查询吗? Firestore read count increases more than users documents

1 个答案:

答案 0 :(得分:0)

读取次数集中在检索到的文档数上。

让我们设置以下4种情况:

  • 由10个用户组成的集合,您运行一个collection("users").get()调用:您将获得 返回10份员工文档,并收取10读费用。
  • 集合了10,000个用户,您进行了collection("users").get()调用:您将获得10,000个用户,并按10,000次读取收费。
  • 由10,000名员工组成的集合,您进行了collection("users").get().limit(10)呼叫:您将获得10位用户,并为10次读取收取费用。
  • 集合了10,000个用户,其中有15个名为“ Carl”,您运行了一次collection("users").where("first_name", "==", "Carl")调用,您将获得4个用户并被收取15次读取费用。

另一方面,如果您正在听整个集合users(没有where()或.orderBy()子句),并且您有一个活动的onSnapshot()侦听器,那么您将被收取文档费用每次在集合users添加更改删除新文档时进行读取操作。

在检查读取操作时,您可能想查看一下工作流程,以检查其他过程是否正在对集合进行更改。

最后,要记住的是,报告中的读取操作可能与计费和配额使用情况不匹配。 Public Issue Tracker中有一项功能请求已实现此查询-在Firestore上读取:here。您可以"star"并将其设置为notifications以获得更新。另外,如有必要,您可以创建一个新的。