在Firestore中侦听查询结果时的文档读取含义



我有一个存储位置的集合,并且我实现了一个基于查询字符串返回建议的搜索函数。它有点像:

if (query.length > 2) {
performSearch(query);
}

因此,每当用户输入一个字符,并且字符数超过2个时,就会触发函数performSearch()。现在,我已经阅读了文档,但我不确定我是否得到了解释。所以我的问题是:

如果我在"位置"集合中有10个文档,这是否意味着每次用户放置一封信并触发搜索功能时,它都会读取这10个文档?还是只读取第一次,然后使用"快照",而不算作读取?

还有一件事我不明白:-如果我使用where方法按名称搜索,并且在"locations"集合中有5个结果,那么它的读数是5还是10。我的意思是,我有10个城市,其中5个以"疯狂"开头,它只读集合中的5个或10个文件吗?

使用以下if语句时:

if (query.length > 2) {
performSearch(query);
}

这意味着只有当用户键入两个以上的字符时,才会触发performSearch()方法。

如果我在"locations"集合中有10个文档,这是否意味着每次用户放入一封信并触发搜索功能时,它都会读取10个文档

否,只有当用户键入三个或更多字符时,该方法才会激发。因此,您将只阅读满足查询的文档。根据有关实时获取数据的官方文件:

使用您提供的回调进行的初始调用会立即使用单个文档的当前内容创建文档快照。然后,每次内容更改时,另一个调用都会更新文档快照。

回答第二个问题:

如果我使用where方法按名称搜索,并且在"locations"集合中有5个结果,那么它的读取次数是5次还是10次。我的意思是,我有10个城市,其中5个以"疯狂"开头,它只读集合中的5个或10个文件吗?

您将被收取与查询返回的文档数相等的文档读取数。因此,在您的情况下,如果您的集合中有10个文档,但您的查询只返回其中5个(其中5个以"Mad"开头(,那么您将只收取5次读取操作的费用。

编辑:

根据您的评论,如果您正在使用实时功能,请根据有关定价的官方文件:

此外,如果侦听器断开连接超过30分钟(例如,如果用户离线(,您将被收取读取费用,就像您发出了一个全新的查询一样。

因此,一旦获得文档,就会将该文档添加到缓存中。因此,如果你再次阅读该文档,你将从缓存中读取它。但是,如果您的侦听器断开连接,您将再次被更改。

最新更新