Rumah  >  Artikel  >  Java  >  Bagaimana untuk Memadamkan Koleksi atau Subkoleksi dalam Firestore sambil Mengekalkan Struktur Data?

Bagaimana untuk Memadamkan Koleksi atau Subkoleksi dalam Firestore sambil Mengekalkan Struktur Data?

DDD
DDDasal
2024-10-27 05:04:02777semak imbas

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

Padamkan Koleksi atau Subkoleksi dalam Firestore

Apabila berurusan dengan struktur data bersarang dalam Firestore, memadamkan koleksi boleh menjadi sukar disebabkan oleh pengehadan daripada pemadaman koleksi. Artikel ini menyediakan penyelesaian untuk memadam kedua-dua koleksi dan subkoleksi sambil mengekalkan struktur data.

Dalam senario yang dibentangkan, terdapat koleksi yang dipanggil "senarai" yang mengandungi dokumen dengan ID yang mewakili ID senarai. Setiap dokumen senarai mempunyai dua subkoleksi: "pekerja" dan "lokasi." Memadamkan senarai tertentu memerlukan pengendalian yang teliti untuk mengelakkan subkoleksi yatim.

Proses Pemadaman

Untuk berjaya memadamkan senarai tertentu, ikut langkah berikut:

  1. Lelaran melalui subkoleksi "pekerja" dan padamkan setiap dokumen.
  2. Lelaran melalui subkoleksi "lokasi" dan padam setiap dokumen.
  3. Padamkan dokumen "listId".

Pemadaman Berkelompok untuk Koleksi Besar

Untuk koleksi besar, dinasihatkan untuk memadamkan dokumen secara berkelompok untuk mengelakkan ralat ingatan. Laksanakan fungsi yang memadamkan dokumen dalam kelompok 10 dan mengulangi proses sehingga keseluruhan koleksi dipadamkan.

Implikasi Keselamatan Firestore

Adalah penting untuk ambil perhatian bahawa Firebase pasukan mengesyorkan agar tidak memadamkan koleksi. Walau bagaimanapun, untuk koleksi kecil dan dalam persekitaran pelayan yang dipercayai, pendekatan ini boleh digunakan dengan berhati-hati.

Contoh Kod untuk Android

Untuk aplikasi Android, anda boleh menggunakan yang berikut kod untuk memadamkan koleksi:

<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 atau Subkoleksi dalam Firestore sambil Mengekalkan Struktur Data?. 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