मेरे ऐप में कुछ जानकारी है जो 24 घंटे तक मौजूद रहती है। इस जानकारी में अन्य उपयोगकर्ताओं द्वारा वोट किए जाने की संभावना है। मतों की संख्या डेटाबेस में दर्ज की जाती है। अगर कोई जानकारी के एक टुकड़े पर वोट करता है, तो मैं चाहता हूं कि इसे केवल तभी अपडेट किया जाए जब पथ वर्तमान में मौजूद हो, क्योंकि डेटा 24 घंटे की सीमा तक पहुंच गया हो और प्रदर्शन समय और वोट समय से हटा दिया गया हो।

Datasnapshot.hasChild जैसी किसी चीज़ का उपयोग करने में समस्या यह है कि मुझे इसकी आवश्यकता होगी 2 अलग-अलग लिखने के लिए निर्देश पढ़ें और लिखें। डेटा पढ़ने के निर्देश के लिए मौजूद हो सकता है लेकिन फिर 24 घंटे के निशान तक पहुंच सकता है और लिखने के निर्देश से पहले हटा दिया जा सकता है।


यह मेरे डेटाबेस की संरचना है, पढ़ने की मात्रा को कम करने के लिए डेटाबेस के दूसरे भाग में नोड स्थिति को डुप्लिकेट किया गया है। यदि यह नोड शून्य हो जाता है, तो दूसरा अभी भी मौजूद है, लेकिन यह नोड यहां है ताकि मैं उन सभी नवीनतम स्थितियों को प्राप्त करने के लिए एक लिख सकूं जो 24 घंटे से कम पुरानी हैं।

मैं एक ऐसा नियम चाहता हूं जो वोटों के मूल्य को बदलने की अनुमति नहीं देता है यदि स्थिति की कुंजी बदल गई है, या यदि स्थिति अब नोड नहीं है।

enter image description here

-1
Sam 17 नवम्बर 2019, 23:55

1 उत्तर

सबसे बढ़िया उत्तर

इस तक पहुंचने के कुछ तरीके हैं।

एक तरीका है फायरबेस नियमों का लाभ उठाना। ऐसा करने से पहले, मैं पहले फायरबेसर्स को खुश रखने के लिए यह कह दूं:

नियम फिल्टर नहीं हैं

हालांकि, आप एक नियम को कर सकते हैं जो एक निश्चित नोड मौजूद नहीं होने पर एक लेखन को रोक देगा। समाधान का सुझाव देने के लिए मुझे आपकी विशिष्ट संरचना और उपयोग के मामले को जानने की आवश्यकता होगी लेकिन नियम बहुत अच्छी तरह से Firebase नियम डॉक्स औरडेटा को अन्य पथों में संदर्भित करना आरंभ करने का स्थान है।

लेकिन, एक सुपर क्लीन एक आसान विकल्प निम्न कोड है जो केवल एक नोड को लिखेगा यदि वह मौजूद है। एक पढ़ता-लिखता है।

func onlyWriteIfNodeExists() {
    let ref = your_firebase.ref.child("may_not_exist")
    ref.observeSingleEvent(of: .value, with: { snapshot in
        if snapshot.exists() {
            snapshot.ref.setValue("updated value")
        } else {
            print("node didn't exist")
        }
    })
}

और संरचना होगी

firebase_root
   may_not_exist: "some value"

इसलिए यदि नोड may_not_exist मौजूद है, तो "कुछ मान" को "अद्यतन मान" से बदल दिया जाएगा अन्यथा कंसोल पर "नोड मौजूद नहीं था" प्रिंट होगा।

कहा जा रहा है, यदि इरादा उपयोगकर्ताओं को उन वस्तुओं पर वोट करने की अनुमति नहीं देना है जो मौजूद नहीं हैं, तो UI को यह प्रतिबिंबित करना चाहिए। दूसरे शब्दों में, यदि ऐप वोट देने के लिए विषय प्रस्तुत करता है और कोई विषय दायरे से बाहर हो जाता है, तो ऐप को उस की एक घटना प्राप्त करनी चाहिए और शायद इसे UI से हटा दें या यह इंगित करने के लिए विषय शीर्षक के माध्यम से एक रेखा खींचे कि यह अब उपलब्ध नहीं है।

1
Jay 18 नवम्बर 2019, 21:39