Firestore规则“允许创建”以不同的ID创建文档(如果已存在)

时间:2020-02-26 15:05:10

标签: google-cloud-firestore firebase-security

我有一个Firestore allow create规则,如果其ID已经存在,则禁止创建该文档。我想做的就是在发生这种情况时用不同的随机ID创建一个新文档。

例如,我想创建10个ID为1,2,3 ... 10的文档。但是,ID 2、3、4已经存在并且不会被创建,因此我希望创建3个具有随机ID的文档(例如11、12、13)。

我该怎么做?谢谢。

1 个答案:

答案 0 :(得分:2)

安全规则无法帮助您强制执行此操作。另外,您尝试做的工作不太适合Firestore,我也会对此进行讨论。

检查安全规则中任何其他文档的内容的唯一方法是调用get()exists(),并且每次规则评估最多只能调用10次。因此,一旦您获得10个以上的文档,就将无法检查足够的文档以强制对文档ID进行编号。

最重要的是,Firestore不太适合大规模使用顺序使用的文档ID。首选方法是在客户端上使用add()生成随机文档ID。如果您需要对这些文档施加某种排序,则应为此使用文档字段值,或者使用另一个带有定义顺序的数组的文档。

如果出于某种原因您有严格的严格顺序文档ID需求,则可能需要重新考虑为什么在NoSQL类型数据库中确实需要此ID。 Firestore打算解决的不是可扩展的情况。

如果文档已经存在,allow create规则永远不会触发也毫无价值。文档一旦存在,客户端只能对其进行更新或删除。如果要阻止客户端更新已经存在的文档,则只需要确保没有allow writeallow update规则就可以进行更新。