如何解决即使我再次调用查询,查询的firebase限制是否仍保持该限制?
我正在创建一个约会应用程序,并且试图将限制限制为一个。一旦此人接受或拒绝了潜在的匹配项,我就会再次调用查询,但不会返回任何内容。如果用户请求100个文档并且仅浏览一个文档,我不希望收费,因此我想将其限制为一个文档,然后每次用户查看一个文档时,以限制为一的方式再次调用该查询。
findMatching(selection) {
const findMatchQuery = this.matchSvc.getMyMatches()
.where('gender','==',itinerary.searchGender)
.orderBy('endDay')
.limit(1);
findMatchQuery.get()
.then(itineraryListSnapshot => {
itineraryListSnapshot.forEach(snapshot => {
let age = moment().diff(snapshot.data().dateOfBirth,'years');
if ((age <= itinerary.ageRange.upper) && (age >= itinerary.ageRange.lower)) {
this.matchingItineraries.push({
id: snapshot.id,userId: snapshot.data().userId,details: snapshot.data().details,searchGender: snapshot.data().searchGender,dateOfBirth: snapshot.data().dateOfBirth,photoUrl: '',displayName: snapshot.data().displayName
});
}
}
});
})
因此,当用户向左或向右滑动时,我会再次调用该查询
rejectItinerary(user): void {
this.matchingItineraries.splice(0,1);
this.findMatching(this.myTargetItinerary);
}
问题是,一旦我拒绝了一个用户并将该用户从数组中删除并再次调用查询,它就不会返回任何内容。这是一种减少db读取定价的策略,但这不是限制的工作原理吗?
第一次调用查询有效,但是第二次不返回任何内容。
解决方法
我不确定我是否完全理解您的问题/疑虑,因此将解释Firebase计费在这种情况下的工作方式(据我了解):
- 每次调用
\n
时,Firebase都必须在服务器上检查与查询匹配的文档。至少要读取1个文档(即使没有匹配的文档),最多也要返回文档数量。 - 由于您的
get()
限制为一个文档,因此每次调用将花费1个文档阅读。 - 每次在
findMatchQuery
查询上调用get()
时,它仍然限于一个文档,因此最多返回1个文档。 - 但是由于
findMatchQuery
将需要与服务器进行检查,因此即使没有(更多)匹配的文档,它也总是花费1个文档来读取。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。