Heim  >  Artikel  >  Java  >  Wie lösche ich Firestore-Sammlungen und Untersammlungen effektiv?

Wie lösche ich Firestore-Sammlungen und Untersammlungen effektiv?

Barbara Streisand
Barbara StreisandOriginal
2024-10-26 15:30:03546Durchsuche

How to Delete Firestore Collections and Subcollections Effectively?

Löschen von Sammlungen und Untersammlungen in Firestore

Problemstellung:

In einer Firestore-Datenbank mit Eine Sammlung von Listen. Jede Liste enthält zwei Untersammlungen: Mitarbeiter und Standorte. Wenn ein Benutzer eine bestimmte Liste löschen möchte, werden durch das Löschen des Listendokuments allein nicht die Untersammlungen entfernt. Dieses Problem entsteht aufgrund des Hinweises in der Firestore-Dokumentation, dass das Löschen eines Dokuments mit Untersammlungen diese Untersammlungen nicht automatisch entfernt.

Vorgeschlagene Lösungen:

1. Untersammlungen iterativ löschen:

  • Alle Dokumente in den Untersammlungen „Mitarbeiter“ und „Standorte“ abrufen.
  • Jedes abgerufene Dokument löschen.
  • Das Listendokument löschen.

2. Verwenden Sie die Methode deleteCollection (nicht empfohlen):

  • Die Firestore-Methode deleteCollection löscht alle Dokumente innerhalb einer Sammlung rekursiv.
  • Verwenden Sie diese Methode nur für kleine Sammlungen, um Speicherfehler zu vermeiden .
  • Stellen Sie sicher, dass Sie diesen Vorgang in einer vertrauenswürdigen Serverumgebung ausführen.

Android-Code für rekursives Löschen:

Der folgende Android-Code demonstriert So löschen Sie eine Sammlung rekursiv:

<code class="java">private void deleteCollection(final CollectionReference collection, Executor executor) {
    Tasks.call(executor, () -> {
        int batchSize = 10;
        Query query = collection.orderBy(FieldPath.documentId()).limit(batchSize);
        List<DocumentSnapshot> deleted = deleteQueryBatch(query);

        while (deleted.size() >= batchSize) {
            DocumentSnapshot last = deleted.get(deleted.size() - 1);
            query = collection.orderBy(FieldPath.documentId()).startAfter(last.getId()).limit(batchSize);

            deleted = deleteQueryBatch(query);
        }

        return null;
    });
}

@WorkerThread
private List<DocumentSnapshot> deleteQueryBatch(final Query query) throws Exception {
    QuerySnapshot querySnapshot = Tasks.await(query.get());

    WriteBatch batch = query.getFirestore().batch();
    for (DocumentSnapshot snapshot : querySnapshot) {
        batch.delete(snapshot.getReference());
    }
    Tasks.await(batch.commit());

    return querySnapshot.getDocuments();
}</code>

Das obige ist der detaillierte Inhalt vonWie lösche ich Firestore-Sammlungen und Untersammlungen effektiv?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn