我在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)
);
}
这种情况有解决方案吗?
答案 0 :(得分:0)
安全规则无法在数据库中搜索数据,因为这将非常缓慢且昂贵。他们所能做的就是检查文档是否在特定路径下,或者将文档作为特定路径阅读并检查其内容。
这意味着,每当您要检查是否存在某物时,都需要确保其生活在已知路径上。因此,如果BID
和Opn=tru
的组合必须唯一,则应创建一个集合,其中每个文档的键都由BID
值和Opn=true
组成。
如果这是您的应用程序的全局要求,那么您甚至可以在现有集合中使用此密钥,而不是当前使用的(可能是自动生成的)密钥。
另请参阅: