MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

मोंगोइड सत्र को केवल पढ़ने के लिए बनाएं

यह एक पुराना सवाल है, लेकिन मुझे हाल ही में एक ही समस्या का सामना करना पड़ा, इसलिए साझा करने का फैसला किया। हालांकि, मैं ध्यान देना चाहता हूं कि यह प्रति-सत्र समाधान नहीं है, बल्कि प्रति-मॉडल समाधान है।

जैसा कि मुझे पता चला, इसे संभव बनाने के दो तरीके हैं:

1. readonly? . को फिर से परिभाषित करें

यदि आप मोंगोइड कोड को देखते हैं, तो आप देखेंगे कि सभी फ़ंक्शन जो सहेजते हैं, हटाते हैं या अपडेट करते हैं, कॉल करते हैं readonly? यह जांचने के लिए कि क्या मॉडल केवल-पढ़ने के लिए है। वास्तव में प्रलेखित नहीं है और इसमें एक खामी है - बनाएं और बनाएं! इस मॉडल पर अनुमति है (नष्ट करें, अपडेट करें, हालांकि सेव नहीं चलेगा)।

private

def readonly?
  true
end

2. एक कस्टम कॉलबैक

पिछली विधि के अतिरिक्त आप यह सुनिश्चित करने के लिए कॉलबैक जोड़ सकते हैं कि क्रिएट भी पास नहीं होगा:

before_create :readonly_secret

private

def readonly?
  true
end

def readonly_secret
  raise Mongoid::Errors::ReadonlyDocument, self.class if readonly?
end

अनिवार्य रूप से, आप readonly? . से छुटकारा पा सकते हैं विधि पूरी तरह से, और अन्य कॉलबैक जोड़ें जैसे कि before_save , before_destroy , before_update , before_create

"readonliness" में हेरफेर करें

यदि आपको रनटाइम कोड से केवल-पढ़ने की स्थिति में हेरफेर करने की आवश्यकता महसूस होती है, तो आप अपने मॉडल की कक्षा के लिए एक विशेषता परिभाषित कर सकते हैं:

before_create :readonly_secret

class << self
  attr_accessor :readonly
end

private

def readonly?
  self.class.readonly.nil? ? true : self.class.readonly
end

def readonly_secret
  raise Mongoid::Errors::ReadonlyDocument, self.class if readonly?
  true
end



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. टेस्टकंटेनर्स + क्वार्कस + मोंगोडीबी के साथ एकीकरण परीक्षण

  2. कुबेरनेट्स मोंगो डीबी से अलग नामस्थान में कनेक्ट करें

  3. मोंगोडब में टाइमस्टैम्प को आज तक कैसे परिवर्तित करें?

  4. क्या mongorestore अलग-अलग तर्कों के बजाय एकल url तर्क ले सकता है?

  5. उबंटू सर्वर पर मोंगोडब का निर्माण करते समय त्रुटि