首页 > 解决方案 > Firestore 规则“允许创建”创建具有不同 ID 的文档(如果已存在)

问题描述

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

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

我怎样才能做到这一点?谢谢。

标签: google-cloud-firestorefirebase-security

解决方案


安全规则将无法帮助您执行此操作。此外,您尝试做的事情不太适合 Firestore,我也会讨论这个问题。

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

最重要的是,Firestore 不太适合在其打算操作的大规模上使用顺序文档 ID。首选方法是在客户端使用 add() 生成随机文档 ID。如果您需要对这些文档进行某种排序,您应该为此使用文档字段值,或者使用另一个文档,其中包含定义顺序的数组。

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

如果文档已经存在,则allow create规则永远不会触发也毫无价值。一旦文档存在,客户端只能更新或删除它。如果您想阻止客户端更新已经存在的文档,您只需确保没有allow write规则allow update允许该更新发生。


推荐阅读