Android Firestore文档共享,无需扫描整个集合

Android Firestore文档共享,无需扫描整个集合,android,firebase,nosql,google-cloud-firestore,Android,Firebase,Nosql,Google Cloud Firestore,我正在学习Firestore的基础知识,并尝试构建一个允许user1与user2/3/4等共享文档的应用程序 出于计费目的,导致文档读取的每个查询都计入成本。因此,我不想采用将user2/3/4 etc电子邮件添加到“sharedWith”变量中以键入:数组或映射类型结构的方法,因为我相信每个用户随后都必须扫描整个集合并选择其电子邮件出现的文档 有没有其他方法可以让user1通过编程方式访问一个特定文档的user2/3/4 出于计费目的,导致文档读取的每个查询都计入成本 这是正确的,根据官方文件

我正在学习Firestore的基础知识,并尝试构建一个允许user1与user2/3/4等共享文档的应用程序

出于计费目的,导致文档读取的每个查询都计入成本。因此,我不想采用将user2/3/4 etc电子邮件添加到“sharedWith”变量中以键入:数组或映射类型结构的方法,因为我相信每个用户随后都必须扫描整个集合并选择其电子邮件出现的文档

有没有其他方法可以让user1通过编程方式访问一个特定文档的user2/3/4

出于计费目的,导致文档读取的每个查询都计入成本

这是正确的,根据官方文件:

对于您执行的每个查询,即使查询不返回任何结果,也至少要收取读取一个文档的费用

因此,即使您的查询没有返回任何结果,您也要负责一次文档读取

我相信每个用户都必须扫描整个收藏,并在出现电子邮件的地方选择文档

这也是正确的。因此,让我们假设您要查找的电子邮件地址存在于一个文档中,该文档包含10k文档集。因此,如果您只查询该特定文档的数据库,则只需读取一个文档,而不必读取那些
10k
。因此,您的费用是根据您取回的物品数量收取的,而不是根据您请求取回的物品数量收取的。当您从Firebase服务器获取数据时,第一个请求就可以使用此功能。如果在此期间没有任何更改,则第二次从缓存获取数据,因为Firestore默认启用了。这意味着您不需要为任何其他文档读取付费

有没有其他方法可以让user1通过编程方式访问一个特定文档的user2/3/4

如果不将数据写入数据库,就不会出现错误。因此,您应该将ID或电子邮件地址添加到所需的文档中,并根据它执行查询

出于计费目的,导致文档读取的每个查询都计入成本

这是正确的,根据官方文件:

对于您执行的每个查询,即使查询不返回任何结果,也至少要收取读取一个文档的费用

因此,即使您的查询没有返回任何结果,您也要负责一次文档读取

我相信每个用户都必须扫描整个收藏,并在出现电子邮件的地方选择文档

这也是正确的。因此,让我们假设您要查找的电子邮件地址存在于一个文档中,该文档包含10k文档集。因此,如果您只查询该特定文档的数据库,则只需读取一个文档,而不必读取那些
10k
。因此,您的费用是根据您取回的物品数量收取的,而不是根据您请求取回的物品数量收取的。当您从Firebase服务器获取数据时,第一个请求就可以使用此功能。如果在此期间没有任何更改,则第二次从缓存获取数据,因为Firestore默认启用了。这意味着您不需要为任何其他文档读取付费

有没有其他方法可以让user1通过编程方式访问一个特定文档的user2/3/4


如果不将数据写入数据库,就不会出现错误。因此,您应该将ID或电子邮件地址添加到所需的文档中,并根据其执行查询。

只是为了我的具体理解,当您说-“…因此,如果您仅为该特定文档查询数据库,您将只负责读取一个文档,而不是10万个文档”-您的意思是如果我运行查询,如果不提供文档编号,并在“sharedWith”变量中请求任何包含user2电子邮件的文档,则将被视为一次读取(如果只有一个文档存在),即使必须扫描10000个文档也是如此。是的,没错。因此,如果您运行类似于
collectionRef.whererraycontains(“sharedWith”)的查询name@gmail.com“”
并且此特定电子邮件地址仅存在于单个文档中,您只需执行一次读取操作。你现在清楚了吗?是的!谢谢你的澄清。只是为了我的具体理解,当你说-“…因此,如果你只查询该特定文档的数据库,你将只负责读取一个文档,而不是那些10k”-你的意思是如果我运行查询,而不提供文档编号,在“sharedWith”变量中请求任何包含user2电子邮件的文档,都将被视为一次读取(如果只有一个文档存在),即使必须为此扫描10000个文档是的,没错。因此,如果您运行类似于
collectionRef.whererraycontains(“sharedWith”)的查询name@gmail.com“”
并且此特定电子邮件地址仅存在于单个文档中,您只需执行一次读取操作。你现在清楚了吗?是的!谢谢你的澄清。