Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 如何在节点中强制执行最大数量的子节点?_Firebase - Fatal编程技术网

Firebase 如何在节点中强制执行最大数量的子节点?

Firebase 如何在节点中强制执行最大数量的子节点?,firebase,Firebase,如何使用安全规则强制一个节点的最大子节点数 /bar/customers/$customer/drinks_ordered 不应该有超过15个孩子。看起来您可以为订购的饮料使用数字id,然后尝试类似的方法;它将失败,因为ID是字符串: "$customer_id": { "drinks_ordered": { "$drink_id": { ".validate": "$drink_id > 0 && $drink_id <

如何使用安全规则强制一个节点的最大子节点数

/bar/customers/$customer/drinks_ordered

不应该有超过15个孩子。

看起来您可以为订购的饮料使用数字id,然后尝试类似的方法;它将失败,因为ID是字符串:

"$customer_id": {
    "drinks_ordered": {
       "$drink_id": {
          ".validate": "$drink_id > 0 && $drink_id < 16" // error
       }
    }
}
现在,在客户可以添加其他饮料之前,他们必须将计数器设置为4(这是唯一可以设置的),然后添加具有相同ID的饮料


有点迂回,但它确实起到了作用:)

我还尝试了第一个示例。支持它会很方便。反方法很聪明!我一直在努力解决这个问题,因为我不断收到一个关于
.val
无效的错误。问题在于验证样本。应该是:`.validate:“.root.child('/bar/customers/'+$customer\u id+'/counter').val()+'=$drink\u id'`,对吗?您也可以将id设置为一个填充了初始零的字符串,然后只验证$drink\u id>='00'&&$drink\u id<'16'…对吗?我不确定>和<在字符串中是否会按预期工作,因为这将是一个词典比较,而不是一个数字比较。例如,100比11早
"$customer_id": {
    "counter": {
       // counter can only be incremented by 1 each time, must be a number
       // and must be <= 15
       ".validate": "newData.isNumber() && newData.val() > 0 && newData.val() <= 15 && ((!data.exists() && newData.val() === 1) || (newData.val() === data.val()+1))"
    },
    "drinks_ordered": {
       // new record's ID must match the incremented counter
       "$drink_id": {
          // use .val()+'' because $drink_id is a string and Firebase always uses ===!
          ".validate": "root.child('bar/customers/'+$customer_id+'/counter').val()+'' == $drink_id"
       }
    }
}
 /bar/customers/george_thorogood/counter/3
 /bar/customers/george_thorogood/drinks_ordered/1/burbon
 /bar/customers/george_thorogood/drinks_ordered/2/scotch
 /bar/customers/george_thorogood/drinks_ordered/3/beer