google-cloud-firestore - Firestore 规则“允许创建”创建具有不同 ID 的文档(如果已存在)
问题描述
我有一条 Firestoreallow create
规则,如果文档 ID 已经存在,则禁止创建该文档。我想做的是在发生这种情况时创建一个具有不同随机 ID 的新文档。
例如,我想创建 10 个 ID 为 1、2、3...10 的文档。但是,ID 2、3、4 已经存在并且不会被创建,所以我想要创建 3 个具有随机 ID 的文档(如 11、12、13)。
我怎样才能做到这一点?谢谢。
解决方案
安全规则将无法帮助您执行此操作。此外,您尝试做的事情不太适合 Firestore,我也会讨论这个问题。
检查安全规则中任何其他文档内容的唯一方法是调用get()或exists(),每次规则评估最多只能调用 10 次。因此,一旦您获得超过 10 个文档,您将无法检查足够多的文档来强制执行文档 ID 编号。
最重要的是,Firestore 不太适合在其打算操作的大规模上使用顺序文档 ID。首选方法是在客户端使用 add() 生成随机文档 ID。如果您需要对这些文档进行某种排序,您应该为此使用文档字段值,或者使用另一个文档,其中包含定义顺序的数组。
如果出于某种原因,您对严格顺序的文档 ID 有严格的要求,您可能需要重新考虑为什么在 NoSQL 类型的数据库中需要它。这不是 Firestore 打算解决的可扩展情况。
如果文档已经存在,则allow create
规则永远不会触发也毫无价值。一旦文档存在,客户端只能更新或删除它。如果您想阻止客户端更新已经存在的文档,您只需确保没有allow write
规则allow update
允许该更新发生。
推荐阅读
- python - 如何将偶数行的数据附加到上面的奇数行?
- android - android 项目在 Linux 上构建,但不在 Windows 上
- spring-boot - 我们可以在tomcat服务器中部署spring-boot jar吗?
- php - 使用 array_splice 以外的其他方法组合两个数组
- python - Google OAuth 不会在 authlib.starlette_client 中返回 refresh_token
- swift - 错误的文件名快速保存在文档目录中
- javascript - 使用 css 属性将文本换行在两行之后
- java - 关闭舞台后,儿童舞台听众不会被杀死
- java - 如何在 ODL 控制器中配置拒绝服务过滤器
- python - 散景错误:模型“面板”不存在