Firestore规则评估中get()调用是否会对查询返回的每个文档额外计读次数?
Firestore安全规则get()调用计费问题解答
问题对应安全规则
match /posts/{post} allow read: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.hasSubscribed == true;
最终结论
你描述的场景下总读次数为51次,安全规则里的get()调用仅会计费1次。
原因说明
- Firestore安全规则会对同一次请求内相同路径的get()调用做缓存复用,你规则里的get路径是固定的
/users/$(request.auth.uid),和当前请求的posts文档没有关联,所以单次查询的所有规则评估只会执行一次这个get调用,仅产生1次额外读计费。 - 本次请求的总读次数 = 拉取50条posts文档的读次数 + 1次安全规则get调用的读次数,合计51次。
例外场景说明
如果你的安全规则get()路径中用到了单个文档的专属参数(比如路径构造用到通配符{post},每次匹配不同post文档时调用的get路径都不相同),这时候才会按实际调用次数计费,50条文档就会产生50次额外读,总读次数达到100次。
内容的提问来源于stack exchange,提问作者Hari Aditya
相关产品推荐
相关产品推荐

