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

Wie lösche ich Firestore-Sammlungen und Untersammlungen ohne Umstrukturierung?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-26 14:34:30509Durchsuche

How to Delete Firestore Collections and Subcollections Without Restructuring?

Löschen von Sammlungen und Untersammlungen in Firestore

Firestore bietet eine hierarchische Datenstruktur mit Sammlungen und Dokumenten. Sammlungen können Untersammlungen enthalten, wodurch eine mehrstufige Verschachtelung entsteht. Beim Löschen einer bestimmten Liste besteht die Herausforderung darin, dass eine Listen-ID nicht gelöscht und gleichzeitig ihre Untersammlungen beibehalten werden können.

Lösung ohne Umstrukturierung:

Um dieses Problem zu umgehen, Die folgenden Schritte können verwendet werden:

  1. Alle Dokumente in der Untersammlung „Mitarbeiter“ abrufen und löschen.
  2. Alle Dokumente in der Untersammlung „Standorte“ abrufen und löschen.
  3. Löschen Sie das listId-Dokument.

Dieser Ansatz stellt die vollständige Entfernung der Liste und der zugehörigen Daten sicher, ohne die Struktur der Datenbank zu beeinträchtigen.

Überlegungen für große Sammlungen:

Beim Umgang mit großen Sammlungen wird empfohlen, Dokumente in kleineren Stapeln zu löschen, um potenzielle Fehler aufgrund von unzureichendem Arbeitsspeicher zu vermeiden. Der Löschvorgang sollte fortgesetzt werden, bis alle Dokumente innerhalb der Sammlung oder Untersammlung entfernt wurden.

Vorsicht bei Löschvorgängen:

Der Löschvorgang ist zwar technisch möglich, die Firebase Aufgrund möglicher Auswirkungen auf Sicherheit und Leistung rät das Team dringend von der Verwendung ab. Es wird nur zum Löschen kleiner Sammlungen empfohlen, insbesondere wenn es von einer vertrauenswürdigen Serverumgebung aus durchgeführt wird.

Android-Implementierung:

Für Android-Anwendungen kann das folgende Codefragment verwendet werden Eine Sammlung löschen:

<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 ohne Umstrukturierung?. 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