2017-07-24 14 views
9

Jak usunąć wszystkie wpisy dla danego identyfikatora Push?Firebase - Jak usunąć wiele wpisów naraz?

Na przykład, powiedzmy, KoxoxwTqfb50E1Gvi9F Push ID znajduje się w wielu miejscach mojej bazy danych, tj. Pod wieloma kluczami i chcę usunąć wszystkie wpisy dla KoxoxwTqfb50E1Gvi9F naraz, w przeciwieństwie do statycznego usuwania wszystkich wpisów (ponieważ znam ich lokalizacje).

Innymi słowy, czy istnieje sposób, aby powiedzieć Firebase "usunąć wszystkie wpisy dla KoxoxwTqfb50E1Gvi9F w całej bazie danych"?

+0

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

+0

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. –

+0

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. –

Odpowiedz

5

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.

Powiązane problemy