【问题标题】:Angular FireStore: applying snapshotChanges() on collection fetches all documents in collection, consume all read operation allowed quicklyAngular FireStore:在集合上应用 snapshotChanges() 获取集合中的所有文档,快速消耗所有允许的读取操作
【发布时间】:2020-08-05 18:46:29
【问题描述】:

我在 Firebase 的 Cloud Firestore 中的收藏有 1500 多条记录。我在我的角度应用程序的网格中显示该数据。问题是,每当我刷新页面或开发应用程序时,每次更改/保存操作时,它都会重新编译并重新加载页面,这会导致 1500 个文档读取操作。我假设 firebase 会自动缓存结果集,而 snapshotChanges() 只会返回新的/更新的记录,但在这里我没有看到任何缓存机制。下面是我用来从 Firebase 获取数据的代码。

getAllProducts(): Observable<Product[]> {

    return this.firestore.collection('Products').snapshotChanges().pipe(map(actions => {

      return actions.map(x => {
        const obj: any = x.payload.doc.data();
        obj.id = x.payload.doc.id;
        return obj as Product;
      });

    }));
  }

我认为这是非常常见的用例,但很可能我遗漏了一些东西。请建议我如何减少读取操作的数量,同时保持对 CloudFirestore 中我的收藏的可观察性?

谢谢

【问题讨论】:

    标签: angular firebase google-cloud-firestore


    【解决方案1】:

    我假设 firebase 会自动缓存结果集,而 snapshotChanges() 只会返回新的/更新的记录

    Firestore SDK 提供的持久层不是这样工作的。

    缓存主要用于support queries while offline。如果您想专门使用缓存而不是再次查询服务器,则需要在查询中提供source option

    【讨论】:

    • 感谢您的回复.. 但是您能否建议我如何减少对 Firebase 进行的读取操作的数量.. 我使用的是免费帐户,一天只允许 50,000 次读取操作,但是因为在一个网格上我有 1500 条记录,所以重新加载几次会消耗所有可用的限制。我可以将所有这些记录的本地副本保存在某些服务或浏览器存储中,但是我如何才能获得对该集合中任何文档的任何更新?
    • 您现在所问的内容过于广泛,无法讨论 Stack Overflow 评论。也许您想在 Reddit 等讨论组中发帖。
    猜你喜欢
    • 2021-01-18
    • 2018-04-03
    • 1970-01-01
    • 2020-08-08
    • 2021-07-01
    • 2021-03-27
    • 2018-07-01
    相关资源
    最近更新 更多