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