我正在尝试使用规则,但是没有用。
这是结构:
我有以下命令:DeleteItemFromListRef.child("List").child(obj.getsEventID()).child(ID).child("check").setValue(false);
但是我想仅在存在子项(键)的情况下才将值设置为“ false”,这样,如果删除该项,我将不会简单地拥有它:
这是我的规则:
"List": {
"$listID" : {
"$key": {
"check" : {
".write":"data.child('List').child($listID).child($key).child('key').exists()"
}
}
}
}
但是,即使子键为空,它仍然会像这样上传数据:
如果有人可以提供帮助,那就很好
编辑2:这是简单得多的规则
"rules": {
"List": {
"$listID" : {
"$key": {
"check" : {
".read":"auth.uid != null",
".write":"auth.uid != null",
".validate":"data.parent().child('key').exists()"
}
}}}}}
+评论:
因此,如果我添加一个新地图,我总是会用地图更新该项目,但是如果我只更改子地图“ check” ,我会使用“ setValue” 方法并且希望仅当项目已经存在(== child key already exist)
答案 0 :(得分:2)
好吧,您还可以首先检查该子代是否存在,并在正确的情况下执行上述命令。
答案 1 :(得分:1)
如果您仅想在其同级属性checked
存在的情况下允许写入key
,则可以执行以下操作:
"List": {
"$listID" : {
"$key": {
"check" : {
".validate":"data.parent().child('key').exists()"
}
}
}
}
更新由于您在进行此项工作时遇到了麻烦,因此我只是在一个非常简单的设置中对其进行了测试。在数据库的/55431756
下,我有以下JSON:
{
"has_key" : {
"key" : "value"
}
}
因此,这是具有has_key
的单个键key
。现在,我进行了两个模拟:一个试图写入has_key
。
由于has_key
存在,因此写入has_key/key
的操作成功:
由于没有no_key
子级,因此拒绝写入no_key/key
: