android - डिलीट को हैंडल करने के लिए इस स्ट्रक्चर को कैसे मॉडल करें



firebase google-cloud-firestore (1)

मेरे पास सूचियों का एक संग्रह है और इसमें दस्तावेज है जो ID है जो सूची ID का प्रतिनिधित्व करता है। इस दस्तावेज़ में संग्रह नामक employees और एक अन्य जिन्हें locations कहा जाता है।

संरचना की तरह दिखता है:

(lists)
    -listId
       (employees)
       (locations)

यदि उपयोगकर्ता किसी विशिष्ट सूची को हटाना चाहता है तो समस्या यह है कि हम सूची को हटा नहीं सकते क्योंकि यह संग्रह रखेगा (जैसा कि फायरस्टार डॉक्स द्वारा उल्लेख किया गया था)।

जरूरतों को पूरा करने के लिए संरचना को कैसे मॉडल बनाया जा सकता है। मैं सबकोलिनेशन की आवश्यकता के आस-पास नहीं जा सकता।

कोई सिफारिश?


कुछ संग्रह को हटाने के लिए अपने डेटाबेस के पुनर्गठन की आवश्यकता नहीं है। क्लाउड फायरस्टार में एक संपूर्ण संग्रह या सबकोलेक्शन को हटाने के लिए, संग्रह या सबकोक्लेक्शन के भीतर सभी दस्तावेजों को पुनः प्राप्त करें और उन्हें हटा दें। इसलिए किसी विशिष्ट सूची को हटाने के लिए, कृपया निम्नलिखित चरणों का उपयोग करें:

  1. employees संग्रह के नीचे सभी दस्तावेजों को ढूंढें और उन्हें हटा दें
  2. locations संग्रह के नीचे सभी दस्तावेज़ खोजें और उन्हें हटा दें
  3. सूची को हटाएं दस्तावेज़

यदि आपके पास बड़े संग्रह हैं, तो आप आउट-ऑफ-मेमोरी त्रुटियों से बचने के लिए छोटे बैचों में दस्तावेज़ों को हटाना चाह सकते हैं। जब तक आप संपूर्ण संग्रह या सबकोलेक्शन हटा नहीं देते, तब तक प्रक्रिया को दोहराएं।

भले ही डिलीट ऑपरेशन फायरबेस टीम द्वारा दोबारा नहीं किया गया है क्योंकि इसमें has negative security and performance implications , फिर भी आप इसे कर सकते हैं लेकिन केवल छोटे संग्रह के लिए। यदि आपको वेब के लिए संपूर्ण संग्रह हटाने की आवश्यकता है, तो केवल विश्वसनीय सर्वर वातावरण से ही ऐसा करें।

Android के लिए, आप निम्न कोड का उपयोग कर सकते हैं:

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




google-cloud-firestore