Maison > Java > javaDidacticiel > le corps du texte

Comment supprimer efficacement des collections et des sous-collections dans Firestore ?

DDD
Libérer: 2024-10-28 12:51:30
original
763 Les gens l'ont consulté

 How to Effectively Delete Collections and Subcollections in Firestore?

Suppression de collections et de sous-collections dans Firestore

Lorsque vous travaillez avec Firestore, des scénarios peuvent survenir dans lesquels vous devez supprimer des collections ou des sous-collections. Cependant, la suppression du document parent qui héberge les sous-collections présente des défis. Cet article explique comment gérer efficacement de telles situations.

Problème de structure de base de données et de suppression

Considérez un scénario avec une collection appelée « listes », où chaque document représente une liste. avec son identifiant unique. Chaque document de liste comporte des sous-collections nommées « employés » et « emplacements ». La structure est la suivante :

(lists)
    -listId
       (employees)
       (locations)
Copier après la connexion

Si un utilisateur souhaite supprimer une liste spécifique, la suppression du document "listId" conservera ses sous-collections, défiant la documentation de Firestore.

Solution : Suppression séquentielle

Pour résoudre ce problème, nous proposons une approche de suppression séquentielle :

  1. Récupérer tous les documents de la sous-collection « employés » et les supprimer.
  2. Répétez le processus pour la sous-collection "locations".
  3. Enfin, supprimez le document "listId".

Cette méthode garantit la suppression complète de la liste spécifique et de ses sous-collections associées.

Considérations

Bien que la suppression soit un outil efficace, Firebase recommande de l'utiliser avec prudence, en particulier pour les grandes collections. Cependant, pour les petites collections, la suppression est une option viable. Si l'utilisation de la suppression pour des collections volumineuses est inévitable, exécutez-la sur un environnement de serveur de confiance.

Implémentation du code pour Android

Pour les applications Android, vous pouvez utiliser le code suivant pour mettre en œuvre le processus de suppression :

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();
}
Copier après la connexion

Ce code récupère et supprime les documents par lots, assurant la suppression à la fois de la collection et de ses sous-collections.

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!

source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!