Rumah >Java >javaTutorial >Bagaimana untuk Memadamkan Koleksi dan Subkoleksi Firestore dengan Berkesan?

Bagaimana untuk Memadamkan Koleksi dan Subkoleksi Firestore dengan Berkesan?

Barbara Streisand
Barbara Streisandasal
2024-10-26 15:30:03552semak imbas

How to Delete Firestore Collections and Subcollections Effectively?

Memadamkan Koleksi dan Subkoleksi dalam Firestore

Pernyataan Masalah:

Dalam pangkalan data Firestore dengan koleksi senarai, setiap senarai mengandungi dua subkoleksi: pekerja dan lokasi. Apabila pengguna ingin memadam senarai tertentu, memadamkan dokumen senarai sahaja tidak mengalih keluar subkoleksi. Isu ini timbul disebabkan oleh petunjuk dokumentasi Firestore bahawa pemadaman dokumen dengan subkoleksi tidak akan mengalih keluar subkoleksi tersebut secara automatik.

Penyelesaian Cadangan:

1. Padamkan Subkoleksi Secara Berulang:

  • Dapatkan semula semua dokumen dalam subkoleksi pekerja dan lokasi.
  • Padamkan setiap dokumen yang diambil.
  • Padamkan dokumen senarai.

2. Gunakan Kaedah deleteCollection (Tidak Disyorkan):

  • Kaedah Firestore deleteCollection memadamkan semua dokumen dalam koleksi secara rekursif.
  • Gunakan kaedah ini hanya untuk koleksi kecil untuk mengelakkan ralat memori .
  • Pastikan untuk melaksanakan operasi ini daripada persekitaran pelayan yang dipercayai.

Kod Android untuk Pemadaman Rekursif:

Kod Android berikut menunjukkan cara memadam koleksi secara rekursif:

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

Atas ialah kandungan terperinci Bagaimana untuk Memadamkan Koleksi dan Subkoleksi Firestore dengan Berkesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn