ホームページ >Java >&#&チュートリアル >Firestore でコレクションとサブコレクションを効果的に削除するにはどうすればよいですか?
Firestore でのコレクションとサブコレクションの削除
Firestore を使用する場合、コレクションまたはサブコレクションを削除する必要があるシナリオが発生する場合があります。ただし、サブコレクションを格納する親ドキュメントを削除するには課題が伴います。この記事では、このような状況を効果的に管理する方法について説明します。
データベースの構造と削除の問題
各ドキュメントがリストを表す、「リスト」と呼ばれるコレクションを含むシナリオを考えてみましょう。一意の ID が付いています。各リスト ドキュメントには、「employees」および「locations」という名前のサブコレクションがあります。構造は次のとおりです。
(lists) -listId (employees) (locations)
ユーザーが特定のリストを削除したい場合、「listId」ドキュメントを削除すると、そのサブコレクションが保持され、Firestore のドキュメントに反します。
ソリューション: 順次削除
これに対処するために、次のような順次削除アプローチを提案します。
このメソッドにより、特定のリストとそれに関連付けられたサブコレクションが完全に削除されます。
考慮事項
削除は効果的なツールですが、Firebase では、特に大規模なコレクションの場合は慎重に使用することを推奨しています。ただし、小規模なコレクションの場合は、削除が実行可能なオプションです。大規模なコレクションに対して削除を使用することが避けられない場合は、信頼できるサーバー環境で実行してください。
Android 用のコード実装
Android アプリケーションの場合、次のコードを使用して、削除プロセスを実装します:
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(); }
このコードはドキュメントをバッチで取得して削除し、コレクションとそのサブコレクションの両方を確実に削除します。
以上がFirestore でコレクションとサブコレクションを効果的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。