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

时间:2017-09-13 21:41:16

标签: firebase firebase-realtime-database

我试图实现验证规则,该规则将检查何时创建新的$resvs,如果任何其他$resvs包含相同的eventKey(该对象的子节点) )作为已存在的reservations节点。

以下代码无效,但现在无法提供更好的内容:

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

编辑:

firebase.database().ref('/reservations').push({
        name: name,
        number: number,
        email: email,
        start: start,
        end: end,           
        scheduleId: scheduleId,
        scheduleName: scheduleName,
        eventKey: eventKey,
        placeId: placeId
    }).then(function(){
      $('#calendar').fullCalendar('refetchEvents'); //confirmaton first? TODO
    }).catch(function(error){
      alert('err');
    });

1 个答案:

答案 0 :(得分:1)

为了解决这个问题,我重新尝试更改数据库结构。不要将event key用作字段,而是尝试将预留数据直接存储在event key下。通过这种方式,您可以在代码中进行一次检查,一次使用安全规则。如果要签入代码,只需在reservations节点上添加一个侦听器,并在dataSnapshot对象上使用exists()方法。以同样的方式使用安全规则,因为根据您的实际数据库结构,您无法以您希望的方式使用通配符。

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

Firebase-root
     |
     --- reservations
              |
              --- eventKey1
              |      |
              |      --- //event1 details
              |
              --- eventKey2
                     |
                     --- //event2 details

但请记住,这只会在事件键为unique时才有效。

希望它有所帮助。