データ構造を維持しながら Firestore でコレクションまたはサブコレクションを削除するにはどうすればよいですか?

DDD
リリース: 2024-10-27 05:04:02
オリジナル
842 人が閲覧しました

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

Firestore でコレクションまたはサブコレクションを削除する

Firestore でネストされたデータ構造を扱う場合、制限によりコレクションの削除が困難になる場合がありますコレクションの削除。この記事では、データ構造を維持しながらコレクションとサブコレクションの両方を削除するためのソリューションを提供します。

提示されたシナリオには、リスト ID を表す ID を持つドキュメントを含む「リスト」と呼ばれるコレクションがあります。各リスト ドキュメントには、「従業員」と「場所」という 2 つのサブコレクションがあります。特定のリストを削除するには、サブコレクションが孤立しないように慎重に処理する必要があります。

削除プロセス

特定のリストを正常に削除するには、次の手順に従います:

  1. 「employees」サブコレクションを繰り返し処理し、各ドキュメントを削除します。
  2. 「locations」サブコレクションを繰り返し処理し、各ドキュメントを削除します。
  3. 「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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!