Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.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
Google cloud firestore 作用域集合组查询_Google Cloud Firestore - Fatal编程技术网

Google cloud firestore 作用域集合组查询

Google cloud firestore 作用域集合组查询,google-cloud-firestore,Google Cloud Firestore,考虑多租户firestore数据库: /customers/{customerId}/users/{userId}/rosters/{rosterId} 因为似乎collectionGroup的作用域是整个数据库。因此,在节点中: let rosters = db.collectionGroup('rosters').where('isActive', '==', 'true'); 将为所有客户返回匹配项。对于客户端,这可以通过安全规则确定范围 如何在管理访问中确定其范围?集合组查询将应用于

考虑多租户firestore数据库:

/customers/{customerId}/users/{userId}/rosters/{rosterId}
因为似乎
collectionGroup
的作用域是整个数据库。因此,在节点中:

let rosters = db.collectionGroup('rosters').where('isActive', '==', 'true');
将为所有客户返回匹配项。对于客户端,这可以通过安全规则确定范围


如何在管理访问中确定其范围?

集合组查询将应用于具有指定名称的所有集合。目前没有办法将其范围扩大到这一范围之外。长期计划是允许对路径进行范围界定,但没有时间表来确定何时可以使用,而且在不久的将来肯定不会

这意味着您需要能够通过集合名称缩小范围(例如,如果您有多种类型的名册,您可能希望将
users
下的集合重命名为
user\u rosters
,以便将集合组查询仅限于用户的名册),或者通过查询中的其他字段条件


虽然后一种情况可能会让人感觉您回到了全局集合,但实际上它仍然比全局集合好,因为子集合确实会带来更好的写入吞吐量。

我知道我可以为每个文档添加一个customerId字段,但这似乎有悖常理。
对于客户端,这可以通过安全规则来确定范围
-您验证过吗?我认为,如果当前用户没有对与集合组ID匹配的任何集合的读取权限,则查询将失败。如果此安全规则的作用域对您有效,请为我提供为集合组查询编写的示例安全规则。一种解决方案是,每个文档上都有一个字段,该字段是其路径的数组。然后在CGQ中,您可以添加db.collectionGroup('rosters')。其中('u path','array contains','customerId.)。其中('isActive','=','true');你们甚至可以在每个文档中预先计算它,作为一个特殊的“隐藏”字段:)