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 :
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!