She*_*ran 1 android firebase firebase-realtime-database
我是 Firebase 的新手。我想在 Firebase 中实现 ondelete 级联。这是我想要解决的问题我有两个表“用户”和“组”。
{ "users":{
"user1":{
"username":"john",
"full_name":"John Vincent",
"created_at":"9th Feb 2015",
"groups":{
"group1":true,
"group3":true
}
"last_logins":...
},
"user2": ...,
"user3": ...
}"groups": {
"group1"{
"group_name":"Administrators",
"group_description":"Users who can do anything!",
"no_of_users":2,
"members":{
"user1":true,
"user3":true
}
},
"group2"{
"group_name":"Moderators",
"group_description":"Users who can only moderate!",
"no_of_users":1,
"members":{
"user2":true
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
请原谅我上面的代码缩进。
现在,如果我从用户表中删除了 user1,那么应该如何使用 Firebase 从组表中自动删除它。
这可以使用 SQL 轻松完成,但我不知道如何在 Firebase 中执行此操作。在 Firebase 中执行此操作的一种方法是从用户中删除 user1,然后将 group1 和 group3 设置为 null,然后在组表中将 user1 设置为 group1/member 下的 null,但这需要 2-3 次调用。那么有没有其他最好的方法来做到这一点。请帮助我,我被困在这里。
Firebase 数据库不知道其 JSON 树中值之间的关系。在 SQL/关系方面:它没有外键的概念。这意味着它也没有使用级联删除删除相关对象的选项。您需要分别删除每个值。
但是您可以通过使用多位置更新将所有这些删除合并到一个调用中。如果您写入null用户的每个位置,则可以通过调用以下方法删除所有位置updateChildren():
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
Map<String,Object updates = new HashMap<String,Object>();
updates.put("users/user1", null);
updates.put("groups/group1/members/user", null);
// Do a deep-path update
ref.updateChildren(updatedUserData, new Firebase.CompletionListener() {
@Override
public void onComplete(FirebaseError firebaseError, Firebase firebase) {
if (firebaseError != null) {
System.out.println("Error updating data: " + firebaseError.getMessage());
}
}
})
Run Code Online (Sandbox Code Playgroud)
有了这个,你就可以编写安全规则来验证一个组的成员也必须存在于/users节点下:
{
"rules": {
"groups":
"$groupid": {
"users": {
"$uid": {
".validate": "newData.parent().parent().parent().parent().child('users').hasChild($uid)"
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您将多个.parent()调用视为newRoot(不幸的是不存在),则验证规则会更容易理解。所以在伪代码中它是:
newRoot.child('users').hasChild($uid)
Run Code Online (Sandbox Code Playgroud)
换句话说:一个 UID 只能是一个组的成员,如果它也存在于/users.
| 归档时间: |
|
| 查看次数: |
1735 次 |
| 最近记录: |