Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 如何检查firestore中是否存在具有给定id的文档,而无需花钱?_Firebase_Flutter_Google Cloud Firestore - Fatal编程技术网

Firebase 如何检查firestore中是否存在具有给定id的文档,而无需花钱?

Firebase 如何检查firestore中是否存在具有给定id的文档,而无需花钱?,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,我有一个场景,其中我有用户的电话号码,我想检查用户是否已经在我的应用程序上注册。为了做到这一点,我在firestore中有一个收藏。在此集合中,我将个人用户的联系电话作为文档。每当用户进入应用程序并输入其手机号码时,应用程序都会发送请求,使用 final snapShot = await Firestore.instance.collection('rCust').document(_phoneNumberController.text).get(); 正因为如此,我的firestore账单

我有一个场景,其中我有用户的电话号码,我想检查用户是否已经在我的应用程序上注册。为了做到这一点,我在firestore中有一个收藏。在此集合中,我将个人用户的联系电话作为文档。每当用户进入应用程序并输入其手机号码时,应用程序都会发送请求,使用

final snapShot = await Firestore.instance.collection('rCust').document(_phoneNumberController.text).get();


正因为如此,我的firestore账单增长非常快。仅在4-5次查询中,我的读取次数就从75次激增到293次。如果有人能指导我如何有效地完成这项工作,那就太好了。

你可以检查一下

if(snapShot.getResults().exists()) {
  // ...
}

如果您不想在每次向文档发送电话号码时进行设置,而是只更新该号码,则应在正在设置数据的文档上使用
update(“fieldToUpdate”,value)
,而不是使用
。设置(value)

检查文档是否存在,在您的情况下,可以在documentSnapshot中使用
.exists
属性:

if(snapShot.exists) {

}
从该查询中,您选择的是单个文档,而不是集合


因为我们看不到其他代码,所以我假设您的firestore使用率实际上并不是因为您的查询而激增,而是因为您在firebase web控制台中查看文档。在web上查看控制台也会产生账单,并一次列出300个文档。

如果您想知道服务器上是否确实存在文档,则通常需要花费您阅读文档的时间。目前无法避免这一成本。这是访问大规模可伸缩索引的成本,它允许您在可能的数十亿文档中找到一个文档


您可以尝试先查询本地缓存,这不需要任何费用。通过将参数传递给。如果您想假设本地缓存中的存在始终意味着该文档存在于服务器上,这将为您节省一次文档读取时间。但是,如果在服务器上删除文档,则本地缓存查询将不正确。您仍然需要查询服务器才能确定。

我想这会给您答案。但这样做,您仍然需要查看所有文档,这是问题所在。OP询问如何检查当前文档是否存在,不是如何减少对收藏品的阅读我理解你的建议有帮助,但这是一种有效的方法吗?正如问题中所问的那样?我也有同样的问题,所以我也想得到一些帮助:)是的,我猜计费高峰是由于web视图造成的,因为我使用的是
。exists
方法当使用参数
Source.get
,如果服务器上的文档被更新,文档会被更新吗?@ShikharVaish No,它只查看缓存,对网络不做任何操作。