Firestore安全规则get()。存在()

时间:2020-05-06 23:19:15

标签: firebase google-cloud-firestore firebase-security

我在Firestore中有如下文件:

BID: "123"
From: "xxx"
Opn: true

在创建文档之前,我需要检查是否有另一个文档具有BID == "123"Opn == true,因为不可能再有一个具有相同BID的Opn为真的文档。

我尝试使用get()exists,但是它不适用于2个数据字段。

我尝试过的事情:

function checkIfThereOpenRoomForSameBBB(xxx) { 
  return !(
    (get(/databases/$(database)/ChatRooms/$(ChatRoom)).data.BID == xxx) &&
    (get(/databases/$(database)/ChatRooms/$(ChatRoom)).data.Opn == true)
  ); 
}

这种情况有解决方案吗?

1 个答案:

答案 0 :(得分:0)

安全规则无法在数据库中搜索数据,因为这将非常缓慢且昂贵。他们所能做的就是检查文档是否在特定路径下,或者将文档作为特定路径阅读并检查其内容。

这意味着,每当您要检查是否存在某物时,都需要确保其生活在已知路径上。因此,如果BIDOpn=tru的组合必须唯一,则应创建一个集合,其中每个文档的键都由BID值和Opn=true组成。

如果这是您的应用程序的全局要求,那么您甚至可以在现有集合中使用此密钥,而不是当前使用的(可能是自动生成的)密钥。

另请参阅: