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

Bagaimana untuk Memadamkan Koleksi dan Subkoleksi dengan Berkesan dalam Firestore?

DDD
DDDasal
2024-10-28 12:51:30763semak imbas

 How to Effectively Delete Collections and Subcollections in Firestore?

Memadamkan Koleksi dan Subkoleksi dalam Firestore

Apabila bekerja dengan Firestore, senario mungkin timbul di mana anda perlu memadamkan koleksi atau subkoleksi. Walau bagaimanapun, memadamkan dokumen induk yang menempatkan subkoleksi menimbulkan cabaran. Artikel ini membincangkan cara mengurus situasi sedemikian dengan berkesan.

Struktur Pangkalan Data dan Masalah Pemadaman

Pertimbangkan senario dengan koleksi yang dipanggil "senarai", di mana setiap dokumen mewakili senarai dengan ID uniknya. Setiap dokumen senarai mempunyai subkoleksi bernama "pekerja" dan "lokasi." Strukturnya adalah seperti berikut:

(lists)
    -listId
       (employees)
       (locations)

Jika pengguna ingin memadamkan senarai tertentu, memadamkan dokumen "listId" akan mengekalkan subkoleksinya, menentang dokumentasi Firestore.

Penyelesaian : Pemadaman Berurutan

Untuk menangani perkara ini, kami mencadangkan pendekatan pemadaman berurutan:

  1. Dapatkan semula semua dokumen dalam subkoleksi "pekerja" dan padamkannya.
  2. Ulangi proses untuk subkoleksi "lokasi".
  3. Akhir sekali, padamkan dokumen "listId".

Kaedah ini memastikan pengalihan keluar senarai khusus dan subkoleksi yang berkaitan dengan sepenuhnya.

Pertimbangan

Walaupun pemadaman merupakan alat yang berkesan, Firebase mengesyorkan menggunakannya dengan berhati-hati, terutamanya untuk koleksi besar. Walau bagaimanapun, untuk koleksi yang lebih kecil, pemadaman adalah pilihan yang berdaya maju. Jika penggunaan pemadaman untuk koleksi besar tidak dapat dielakkan, laksanakannya pada persekitaran pelayan yang dipercayai.

Pelaksanaan Kod untuk Android

Untuk aplikasi Android, anda boleh menggunakan kod berikut untuk laksanakan proses pemadaman:

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();
}

Kod ini mendapatkan semula dan memadamkan dokumen dalam kelompok, memastikan pemadaman kedua-dua koleksi dan subkoleksinya.

Atas ialah kandungan terperinci Bagaimana untuk Memadamkan Koleksi dan Subkoleksi dengan Berkesan dalam Firestore?. 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