Firebase 检查其他节点是否具有相同的子节点值

Firebase 检查其他节点是否具有相同的子节点值,firebase,firebase-realtime-database,Firebase,Firebase Realtime Database,我正在尝试实现验证规则,该规则将在创建新的$resv时检查是否有任何其他$resv包含与已存在的保留节点相同的eventKey,该eventKey是该对象的子节点 以下代码不起作用,但现在无法找到更好的代码: "reservations": { "$resvs": { ".write": "!data.exists() || newData.child('eventKey').val() == root.child('reservations/$res

我正在尝试实现验证规则,该规则将在创建新的$resv时检查是否有任何其他$resv包含与已存在的保留节点相同的eventKey,该eventKey是该对象的子节点

以下代码不起作用,但现在无法找到更好的代码:

"reservations": {        
  "$resvs": {        
    ".write": "!data.exists() || newData.child('eventKey').val() == root.child('reservations/$resvs/eventKey').val()"
  }
}
编辑:


为了解决这个问题,我建议您稍微更改一下数据库结构。不要将事件键用作字段,而是尝试将保留数据直接存储在事件键下。通过这种方式,您可以在代码中和使用安全规则时进行双重检查。如果要签入代码,只需在reservations节点上添加一个侦听器,并在dataSnapshot对象上使用exists方法。以同样的方式使用安全规则,因为在实际的数据库结构中,不可能以您想要的方式使用通配符

您的数据库新结构应如下所示:

Firebase-root
     |
     --- reservations
              |
              --- eventKey1
              |      |
              |      --- //event1 details
              |
              --- eventKey2
                     |
                     --- //event2 details
但请记住,这仅在且仅当事件密钥唯一时才起作用


希望有帮助。

如果事件键是唯一标识符,为什么不存储由它们键入的保留,而不是将它们放在字段中?没有办法在安全规则中使用通配符。这似乎是最可行的解决方案。我用创建预订的实际代码更新了我的问题。我应该如何修改它以使用eventKey作为父项?是的,新的数据结构非常有意义。我仍然在挣扎的是代码实现——我想在ref url的末尾添加eventKey,这样它就可以存储在那里了。这是一个选项。因为它是唯一的,所以也只能使用eventKey。如你所愿,你也可以等待其他的答案,但是如果你认为我的答案对你有帮助,请考虑接受并投票表决。谢谢
Firebase-root
     |
     --- reservations
              |
              --- eventKey1
              |      |
              |      --- //event1 details
              |
              --- eventKey2
                     |
                     --- //event2 details