首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >收集组查询是否需要{path=**}?

收集组查询是否需要{path=**}?
EN

Stack Overflow用户
提问于 2019-05-09 03:09:56
回答 1查看 428关注 0票数 1

我通读了一下collection group query documentation,想知道为了让收集组查询正常工作,递归通配符(rules_version = '2') {path=**}是否是必需的。

我将给您一个示例(遵循文档中的示例):

forums/{forum}/posts/{post}.

  • 数据库使用具有不同论坛的forums集合。
  • 每个论坛可以具有以下结构中的多个posts.
  • This结果:forums/{forum}/posts/{post}.

以下两个片段都将成功匹配所有帖子:

match /forums/{forum}/posts/{post} {
  allow list;
}

match /{path=**}/posts/{post} {
  allow list;
}

如果我正确理解了文档,第一个match将不足以使posts上的收集组查询正常工作。

我知道第二个match也将匹配任何其他名为posts的子集

第一个match就足够了吗?

如果不是,递归通配符{path=**}是否总是必须是顶级的,即直接在match /databases/{database}/documents中?文档让它看起来就像是这样。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-09 03:43:31

文档表明,您的第一条规则不足以允许对帖子进行收集组查询。

在您的安全规则中,您必须允许此收集组查询,方法是为帖子收集组编写一个读取或列出规则

list。

match /{path=**}/post/{post}{允许读取: if request.auth.uid != null;}

如果您正在询问是否可以使用安全规则将收集组查询限制在称为"posts“的子集,这是不可能的。查询中将考虑所有名为“post”的集合。这就是为什么通配符也必须位于匹配路径的开头的原因,因为其他任何东西都仍然是对集合集合的约束。

这一切都只是security rules are not filters的主要规则的一个变体。它们既不能过滤用于常规查询的文档,也不能过滤用于收集组查询的集合。

该文档进一步帮助您了解如何对数据建模,以便可以在客户端应用过滤器,并将其与正在搜索的文档中存在的字段进行匹配。客户端可以始终使用where子句过滤结果,但它还必须与安全规则的约束相匹配。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56047515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档