angular - 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 读取计数增加超过用户文档
解决方案
读取计数集中在检索到的文档数上。
让我们设置这 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。您可以“加注星标”并设置通知以获取有关它们的更新。此外,如有必要,您可以创建一个新的。
推荐阅读
- firebase-cloud-messaging - 尝试向某些设备发送通知时出现 SENDER_ID_MISMATCH 错误
- ios - 在 iOS 中检测以 YTPlayer 视图结尾的歌曲
- javascript - 函数不返回记录集
- jquery - 无法将从控制器传递到 thymeleaf html 的模型属性传递回另一个控制器
- javascript - 单击图像时如何隐藏图像并显示视频而不是它?使用 JavaScript
- css - CSS 溢出只滚动一个方向
- laravel - laravel Session::flush 不删除存储/框架/会话中的会话文件
- regex - 秒后的正则表达式捕获 /
- php - 构造函数内的属性值设置
- node.js - DocumentDB 连接问题