如何在不使用 get() 的情况下根据父集合中的字段实现对 firestore 子集合的控制?

How to achieve control over a firestore sub-collection depending on a field in a parent collection without using get()?

下面这段代码可以正常工作,但它会导致我的代码被额外读取,我正在获取存储在数据集合 (premiumUntill) 中的值,以便 allow/block进入子集合。在检查位于父集合中的某个先前值的状态时,是否有任何其他方法不会导致额外读取,或者这是唯一的方法。

match /Data/{dataDocId}/SubData/{subdataDocId} {
    allow get: if request.auth != null 
    allow create: if request.auth != null  
    && get(/databases/$(database)/documents/Data/$(dataDocId)).data.premiumUntill > req.time
}

按文档读取(或每次成功查询)计费。使用 get() 或其他都没有关系。它仍然只是 相关文档 的一读。没有其他方法可以检查以前的值或检查动态内容。您将需要为阅读付费。

有关详细信息,请查看此文档:

如果您正在使用 get() 从其他文档中读取数据,那么您将被收取读取费用。另一种防止读取 Firestore 规则的方法是将 premiumUntill 存储在 Custom Claims 中。您需要一个 Cloud Function 来设置自定义声明,但最好的是您可以从任何其他 Firebase 服务(例如存储和实时数据库)访问 premiumUntill(如果您使用任何服务)。