我是Firestore的新手,所以我有一个Profiles和Users集合。在Cloud Firestore控制台中,当我单击数据库> Firestore>数据选项卡>配置文件或>用户时,该控制台正在读取每个集合中的所有文档。这些读取计数在“用法”选项卡中。所以我的问题是,如果让我说“个人档案”集合中有50万个文档,然后单击“数据”,我将被收取阅读50万个文档的费用,仅查看前25个文档。只需单击“数据”选项卡,控制台即可读取第一个集合的所有文档。
我尝试使用过滤器,但要使用它,您必须先单击“收藏夹”并先阅读所有文档,然后才能编辑过滤器。
这是它的工作方式还是我的误解?
答案 0 :(得分:1)
前段时间我也遇到了同样的困惑,在深入研究这个问题后,我了解到在“ Firestore”页面的“数据”标签中加载的所有数据确实计入了Firestore的整体使用情况
但是,我担心与您的问题相同,因此我联系了Firebase支持。他们回过头来确认我的第一个本能(“数据”选项卡中的文档读取确实算在内)但最初,它仅读取任何选定集合的前300个文档,因此即使您的集合中有超过一百万个文档,它也会仍然只加载前300个文档。
他们提出了解决方法,直到Firebase团队找到合法解决方案
答案 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,这样会影响计数吗?我无法正确检查,因为正在进行许多其他操作。 谢谢。