Aby usunąć wiele wpisów z bazy danych, musisz znać wszystkie te lokalizacje (referencje). Więc innymi słowy, w sposobie dodawania danych, powinieneś go również usunąć.
Zakładając bazy danych wygląda następująco:
Firebase-root
|
--- Users
| |
| --- userUid1
| | |
| | --- //user1 data
| |
| --- userUid2
| |
| --- //user2 data
|
--- Groups
|
--- groupId1
| |
| --- //group1 data
| |
| --- Users
| |
| --- userUid1: true
| |
| --- userUid3: true
|
--- groupId2
|
--- //group2 data
Proponuję przy użyciu poniższego sposobu:
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);
}
Metoda ta niepodzielnie usuwa te wszystkie wpisy. Korzystając z tych ścieżek, można jednocześnie aktualizować wiele lokalizacji w drzewie JSON za pomocą pojedynczego wywołania metody deleteUser()
. Jednoczesne usuwanie wykonane w ten sposób jest atomowe: albo wszystkie aktualizacje zakończą się pomyślnie, albo wszystkie aktualizacje zakończą się niepowodzeniem.
Mam nadzieję, że to pomaga.
Brak, o którym słyszałem. Jaka jest dokładnie w twoim przypadku konieczność? Czy chcesz zachować prostotę po stronie klienta? Czy chcesz się upewnić, że wszystko zostało usunięte? – Barthy
Musisz znać wszystkie miejsca, w których coś może się pojawić i zarządzać nimi samemu. Baza danych nie rozumie struktury twoich danych - to tylko pojemnik, abyś mógł robić, co chcesz. –
Nie jestem pewien, czy to możliwe bez funkcji niestandardowej. Możesz zajrzeć do Funkcji Firebase, za pomocą których możesz utworzyć detektor dla konkretnej lokalizacji, a następnie usunąć wszystkie pozostałe wartości tego samego klucza. –