ktm*_*125 3 firebase firebase-security google-cloud-firestore
是否可以检查请求删除/添加文档数组的哪个元素?
小智 8
2020 年更新
您现在实际上可以检查已删除的项目。你所要做的就是从旧的数组中减去新的、减少的数组,removeAll()并检查它返回的数组的项目。
例如,只允许uid从数组中删除自己的,你可以这样做:
allow update: if
request.auth.uid != null
&& request.resource.data.users.size() == resource.data.users.size() - 1
&& resource.data.users.removeAll(request.resource.data.users)[0] == request.auth.uid
Run Code Online (Sandbox Code Playgroud)
具体来说:
uid),removeAll()并返回一个数组及其差值。在这种情况下,它返回一个只包含uid您选择的单曲的数组arrayRemove()。然后我们简单地检查uid——它只能存在于位置[0]——并确保它等于uid经过身份验证的用户的。您可能已经注意到,Cloud Firestore 中的查询速度非常快,这是因为 Firestore 会自动为文档中的任何字段创建索引。
有很多帖子说数组在 Cloud Firestore 上效果不佳,因为当您拥有可由多个客户端更改的数据时,很容易感到困惑,因为您不知道正在发生什么以及在哪个特定字段上。如果您正在使用 aMap并且用户想要编辑多个不同的字段,甚至是完全相同的字段,我们通常都知道发生了什么。在数组中,情况有所不同。尝试想想如果一个用户想要编辑索引 0 处的值,其他一些用户想要删除索引 0 处的值,同时另一个用户想要在索引 1 处添加另一个值,那么会发生什么,你最终会发生什么有非常不同的结果,为什么不呢,一个ArrayIndexOutOfBoundsException。因此,Firestore 与数组的操作略有不同。因此您无法在特定索引处执行插入、更新或删除等操作。因此,仅当不关心存储元素的确切顺序时才使用数组。Firestore 几天前添加了一些功能来添加或删除特定元素,但前提是不关心它们的确切位置。请参阅此处官方文档。
并回答你的问题:
是否可以检查请求删除/添加文档数组的哪个元素?
你不能!
| 归档时间: |
|
| 查看次数: |
732 次 |
| 最近记录: |