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

时间:2019-03-01 11:16:25

标签: android firebase nosql google-cloud-firestore

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

出于计费目的,导致文档读取的每个查询都计入成本。因此,我不想遵循将user2 / 3/4等电子邮件添加到“ sharedWith”变量以键入:数组或映射类型结构的方法,因为我相信每个用户都将不得不扫描整个集合并选择记录电子邮件的显示位置。

还有其他方法可以使user1以编程方式授予对一个特定文档的user2 / 3/4的访问权限吗?

1 个答案:

答案 0 :(得分:0)

  

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

是正确的,并且根据有关Cloud Firestore billing的官方文档:

  

即使查询没有返回结果,对于您执行的每个查询,最低读取一个文档的费用。

因此,即使查询不返回任何结果,您也需要阅读一份文档。

  

我相信每个用户都将不得不扫描整个馆藏并选择出现电子邮件的文档。

那也是正确的。因此,假设您要查找的电子邮件地址存在于文档中,该文档是10k文档集合的一部分。因此,如果您仅查询该特定文档的数据库,则将只收取仅读取一个文档,而不支付那些Array ( Array( 'year' => '2018', 'data' => Array( 'Essence' => [68,54,69,36,36,47,103,97,69,68,0,12], 'Lalo' => [68,54,69,36,36,47,03,45,63,68,0,12] ) ), Array( 'year' => '2015', 'data' => Array( 'Essence' => [68,54,69,36,36,47,03,97,69,68,0,12], 'Lalo' => [68,54,69,36,36,47,03,97,69,68,0,12], 'Sahafa' => [62,02,0,4,7,65,26,97,62,35,36,31,16] ) ), Array( 'year' => '2015', 'data' => Array( 'Mika' => [02,03,06,01,10,17,13,17,17,17,10,12], 'Simba' => [08,04,09,46,26,27,34,70,09,04,07,21] ), ) ); 的费用。因此,您是根据退回商品的数量而不是从您要求它们的商品数量来收费的。当您从Firebase服务器获取数据时,这可用于第一个请求。如果与此同时没有任何变化,则第二次从缓存中获取数据,因为Firestore默认启用了offline persistence。这意味着您无需为阅读其他任何文档付费。

  

还有其他方法可以使user1以编程方式授予一个特定文档的user2 / 3/4访问权限吗?

没有将数据写入数据库,则没有。因此,您应该将ID或电子邮件地址添加到所需的文档中,并根据其进行查询。