
Firestore でコレクションまたはサブコレクションを削除する
Firestore でネストされたデータ構造を扱う場合、制限によりコレクションの削除が困難になる場合がありますコレクションの削除。この記事では、データ構造を維持しながらコレクションとサブコレクションの両方を削除するためのソリューションを提供します。
提示されたシナリオには、リスト ID を表す ID を持つドキュメントを含む「リスト」と呼ばれるコレクションがあります。各リスト ドキュメントには、「従業員」と「場所」という 2 つのサブコレクションがあります。特定のリストを削除するには、サブコレクションが孤立しないように慎重に処理する必要があります。
削除プロセス
特定のリストを正常に削除するには、次の手順に従います:
- 「employees」サブコレクションを繰り返し処理し、各ドキュメントを削除します。
- 「locations」サブコレクションを繰り返し処理し、各ドキュメントを削除します。
- 「listId」ドキュメントを削除します。
大規模なコレクションのバッチ削除
大規模なコレクションの場合は、メモリ エラーを避けるためにドキュメントをバッチで削除することをお勧めします。ドキュメントを 10 個のバッチで削除し、コレクション全体が削除されるまでプロセスを繰り返す関数を実装します。
Firestore のセキュリティへの影響
Firebase は次の点に注意することが重要です。チームはコレクションを削除しないことをお勧めします。ただし、小規模なコレクションや信頼できるサーバー環境では、このアプローチは注意して使用できます。
Android のコード例
Android アプリケーションの場合は、次を利用できます。コレクションを削除するコード:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <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>
|
ログイン後にコピー
以上がデータ構造を維持しながら Firestore でコレクションまたはサブコレクションを削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。