Maison  >  Article  >  Java  >  Comment supprimer une collection ou une sous-collection dans Firestore tout en conservant la structure des données ?

Comment supprimer une collection ou une sous-collection dans Firestore tout en conservant la structure des données ?

DDD
DDDoriginal
2024-10-27 05:04:02777parcourir

How to Delete a Collection or Subcollection in Firestore while Maintaining Data Structure?

Supprimer une collection ou une sous-collection dans Firestore

Lorsque vous traitez des structures de données imbriquées dans Firestore, la suppression d'une collection peut être délicate en raison des limitations de suppression de collection. Cet article fournit une solution pour supprimer à la fois les collections et les sous-collections tout en conservant la structure des données.

Dans le scénario présenté, il existe une collection appelée « listes » contenant des documents avec des ID représentant les ID de liste. Chaque document de liste comporte deux sous-collections : « employés » et « emplacements ». La suppression d'une liste spécifique nécessite une manipulation minutieuse pour éviter les sous-collections orphelines.

Processus de suppression

Pour supprimer avec succès une liste spécifique, suivez ces étapes :

  1. Parcourez la sous-collection "employés" et supprimez chaque document.
  2. Parcourez la sous-collection "emplacements" et supprimez chaque document.
  3. Supprimez le document "listId".

Suppression par lots pour les grandes collections

Pour les grandes collections, il est conseillé de supprimer les documents par lots pour éviter les erreurs de mémoire. Implémentez une fonction qui supprime les documents par lot de 10 et répète le processus jusqu'à ce que la collection entière soit supprimée.

Implications sur la sécurité de Firestore

Il est important de noter que Firebase L'équipe recommande de ne pas supprimer les collections. Toutefois, pour les petites collections et dans les environnements de serveurs de confiance, cette approche peut être utilisée avec prudence.

Exemple de code pour Android

Pour les applications Android, vous pouvez utiliser les éléments suivants code pour supprimer 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>

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