Maison  >  Article  >  Java  >  Comment supprimer efficacement des collections et des sous-collections dans Firestore ?

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

DDD
DDDoriginal
2024-10-28 12:51:30763parcourir

 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)

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();
}

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!

Déclaration:
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