Google Cloud Firestore控制台读取所有文档和费用

时间:2019-02-17 02:09:12

标签: google-cloud-firestore firebase-console

我是Firestore的新手,所以我有一个Profiles和Users集合。在Cloud Firestore控制台中,当我单击数据库> Firestore>数据选项卡>配置文件或>用户时,该控制台正在读取每个集合中的所有文档。这些读取计数在“用法”选项卡中。所以我的问题是,如果让我说“个人档案”集合中有50万个文档,然后单击“数据”,我将被收取阅读50万个文档的费用,仅查看前25个文档。只需单击“数据”选项卡,控制台即可读取第一个集合的所有文档。

我尝试使用过滤器,但要使用它,您必须先单击“收藏夹”并先阅读所有文档,然后才能编辑过滤器。

这是它的工作方式还是我的误解?

3 个答案:

答案 0 :(得分:1)

前段时间我也遇到了同样的困惑,在深入研究这个问题后,我了解到在“ Firestore”页面的“数据”标签中加载的所有数据确实计入了Firestore的整体使用情况

但是,我担心与您的问题相同,因此我联系了Firebase支持。他们回过头来确认我的第一个本能(“数据”选项卡中的文档读取确实算在内)但最初,它仅读取任何选定集合的前300个文档,因此即使您的集合中有超过一百万个文档,它也会仍然只加载前300个文档。

他们提出了解决方法,直到Firebase团队找到合法解决方案

  1. 在Firestore页面的用法标签上添加书签。 (因此,您基本上可以“跳过”“数据”标签,并且无用的300次读取操作)
  2. 以某种方式添加虚拟集合,以确保它是默认情况下在Firestore页面上默认加载的第一个集合(按字母顺序)。

答案 1 :(得分:0)

  

所以我的问题是,如果我让“个人档案”集合中有50万个文档,然后单击“数据”,我将被收取阅读50万个文档的费用

绝对不是!您只负责查询之外的文档的读取操作。我不知道第一个查询的确切数量,但是数据以较小的块加载,换句话说,实现了分页系统。因此,一旦向下滚动,就会加载其他元素,依此类推。

如果您打算创建将Firestore用作后端的应用,请注意offline persistence

  

对于Android和iOS,默认情况下启用离线持久性。

     

对于Web,默认情况下禁用离线持久性。要启用持久性,请调用enablePersistence方法。

     
      
  • 对于Web,脱机持久性是一项实验性功能,仅Chrome,Safari和Firefox Web浏览器支持。此外,如果用户打开多个指向同一Cloud Firestore数据库的浏览器选项卡,并且启用了离线持久性,则Cloud Firestore仅在第一个选项卡中可以正常工作。
  •   

这意味着,一旦您从Firebase服务器获取文档,就不会再费心了,因为结果来自本地缓存。

答案 2 :(得分:0)

我只是有一个类似的问题,我发现将其作为问题发布是多余的,所以我将其发布为“对不起”,对此表示歉意,

问题:

this.db.collection(this.collectionName.usersCollection)
        .doc(currentUserId).collection(this.collectionName.friendsCollection)
        .where("friendID","==",id)    
        .get().then(snapshot =>{
          if(snapshot.empty)
          {

            this.db.collection(this.collectionName.chatsCollection).add({
              user1 : currentUserId,
              user2 : id
            }).then(docRef =>{
              docId = docRef.id;
              this.db.collection(this.collectionName.usersCollection)
              .doc(currentUserId)
              .collection(this.collectionName.friendsCollection).doc(docId)
              .set({

                friendID: id,

              })
              this.db.collection(this.collectionName.usersCollection).doc(id)
              .collection(this.collectionName.friendsCollection).doc(docId)
              .set({
                friendID:currentUserId,

               })
               resolve(docRef.id);
            })

          }
          else{
              snapshot.forEach(document =>{
                // console.log("friend id",document.data().friendID, "  docid: ",document.data().docId);
                resolve(document.id);
              })
          }
        })

所以这里我正在编写和阅读docId,这样会影响计数吗?我无法正确检查,因为正在进行许多其他操作。 谢谢。