Maison > Java > javaDidacticiel > Comment supprimer efficacement les collections et sous-collections Firestore ?

Comment supprimer efficacement les collections et sous-collections Firestore ?

Barbara Streisand
Libérer: 2024-10-26 15:30:03
original
642 Les gens l'ont consulté

How to Delete Firestore Collections and Subcollections Effectively?

Suppression de collections et de sous-collections dans Firestore

Énoncé du problème :

Dans une base de données Firestore avec une collection de listes, chaque liste contient deux sous-collections : employés et emplacements. Lorsqu'un utilisateur souhaite supprimer une liste spécifique, la suppression du document de liste à elle seule ne supprime pas les sous-collections. Ce problème survient en raison de l'indication de la documentation Firestore selon laquelle la suppression d'un document avec des sous-collections ne supprime pas automatiquement ces sous-collections.

Solutions proposées :

1. Supprimer les sous-collections de manière itérative :

  • Récupérez tous les documents dans les sous-collections des employés et des emplacements.
  • Supprimez chaque document récupéré.
  • Supprimez le document de liste.

2. Utilisez la méthode deleteCollection (non recommandée) :

  • La méthode Firestore deleteCollection supprime tous les documents d'une collection de manière récursive.
  • Utilisez cette méthode uniquement pour les petites collections afin d'éviter les erreurs de mémoire. .
  • Assurez-vous d'exécuter cette opération à partir d'un environnement de serveur de confiance.

Code Android pour la suppression récursive :

Le code Android suivant illustre comment supprimer récursivement une collection :

<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>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal