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

Bagaimana untuk Memadamkan Koleksi dan Subkoleksi Firestore dengan Berkesan?

Barbara Streisand
Lepaskan: 2024-10-26 15:30:03
asal
591 orang telah melayarinya

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan