如何删除指定推送ID的所有条目?
例如,让我们说KoxoxwTqfb50E1Gvi9F
推送ID位于我的数据库的许多位置,即在许多密钥下,我想立即删除KoxoxwTqfb50E1Gvi9F
的所有条目,而不是静态删除所有参赛作品(因为我知道他们的位置)。
换句话说,有没有办法告诉Firebase"删除整个数据库中的KoxoxwTqfb50E1Gvi9F
的所有条目"?
答案 0 :(得分:7)
要从数据库中删除多个条目,您需要知道所有这些位置(参考)。换句话说,在添加数据的方式中,您也应该删除它。
假设您的数据库如下所示:
Firebase-root
|
--- Users
| |
| --- userUid1
| | |
| | --- //user1 data
| |
| --- userUid2
| |
| --- //user2 data
|
--- Groups
|
--- groupId1
| |
| --- //group1 data
| |
| --- Users
| |
| --- userUid1: true
| |
| --- userUid3: true
|
--- groupId2
|
--- //group2 data
我建议你使用以下方法:
private static void deleteUser(String userId, String groupId) {
Map<String, Object> map = new HashMap<>();
map.put("/Users/" + userId + "/", null);
map.put("/Groups/" + groupId + "/Users/" + userId + "/", new HashMap<>().put(userId, null));
//other locations
databaseReference.updateChildren(map);
}
此方法以原子方式删除所有条目。使用这些路径,您只需调用deleteUser()
方法,即可同时更新JSON树中的多个位置。以这种方式同时删除是原子的:要么所有更新都成功,要么所有更新都失败。
希望它有所帮助。