首页 > 解决方案 > 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 读取计数增加超过用户文档

标签: angulartypescriptfirebasegoogle-cloud-firestore

解决方案


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

让我们设置这 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

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

最后,需要记住的是,您的报告中的读取操作可能与计费和配额使用情况不匹配。公共问题跟踪器中有一个与此查询相关的功能请求- 在 Firestore 上阅读:here。您可以“加注星标”并设置通知以获取有关它们的更新。此外,如有必要,您可以创建一个新的。


推荐阅读