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

Go . से MongoDB एक्सेस करना

यदि आप किसी मान को बदलना चाहते हैं या अपने मानों को / से मोंगोडीबी में मार्शलिंग/अनमर्शलिंग करते समय एक प्रकार का रूपांतरण करना चाहते हैं, तो आप कस्टम मार्शलिंग/अनमर्शलिंग तर्क को लागू करके ऐसा कर सकते हैं।

आप bson.Getter . को लागू करके ऐसा कर सकते हैं और bson.Setter इंटरफेस। इन विधियों के अंदर, आप जो चाहें कर सकते हैं, मानों को मार्शल/अनमार्शल किया जा रहा है।

सबसे आसान है अपने clientConfigData . का विस्तार करना एक अतिरिक्त फ़ील्ड के साथ टाइप करें, जो कि प्रकार का होगा time.Time , वह मूल्य जो आपको चाहिए:

type clientConfigData struct {
    SMTPAssoc  int       `bson:"smtp_assoc"`
    PlanType   string    `bson:"plan_type"`
    EndDateStr string    `bson:"end_date"`
    EndDate    time.Time `bson:"-"`
}

इसका टैग मान है bson:"-" , क्योंकि हम नहीं चाहते कि यह MongoDB में दिखाई दे।

और अब कस्टम मार्शलिंग/अनमर्शलिंग लॉजिक:

const endDateLayout = "2006-01-02 15:04:05" // Use your layout here

func (c *clientConfigData) SetBSON(raw bson.Raw) (err error) {
    type my clientConfigData
    if err = raw.Unmarshal((*my)(c)); err != nil {
        return
    }
    c.EndDate, err = time.Parse(endDateLayout, c.EndDateStr)
    return
}

func (c *clientConfigData) GetBSON() (interface{}, error) {
    c.EndDateStr = c.EndDate.Format(endDateLayout)
    type my *clientConfigData
    return my(c), nil
}

यहाँ क्या होता है कि SetBSON() MongoDB से आने वाले कच्चे मूल्य के साथ आपके स्ट्रक्चर वैल्यू को "पॉप्युलेट" करने के लिए जिम्मेदार है, और GetBSON() वह मान प्रदान करने के लिए ज़िम्मेदार है जिसे आप सहेजना चाहते हैं (मार्शल)।

लोड करते समय:SetBSON() पहले मान को यथावत अनमार्शल करता है, फिर EndDate . को ठीक से सेट करता है फ़ील्ड (जो time.Time . प्रकार का है ) string . से दिनांक मान जो DB से आया है (EndDateStr )।

सहेजते समय:GetBSON() सबसे पहले EndDateStr भरता है EndDate . से फ़ील्ड (जो सहेजा गया है) फ़ील्ड, और फिर बस लौटता है, यह दर्शाता है कि सहेजना ठीक है।

एक बात ध्यान देने योग्य है:दोनों SetBSON() और GetBSON() एक नया my बनाएं उनके अंदर टाइप करें। इसका कारण स्टैक ओवरफ्लो से बचना है। बस clientConfigData प्रकार का मान लौटा रहा है खराब है, क्योंकि हमने bson.Getter . लागू किया है और bson.Setter , तो SetBSON() और GetBSON() अंतहीन बुलाया जाएगा। नया my प्रकार में ये विधियां नहीं हैं, इसलिए अंतहीन "पुनरावृत्ति" नहीं होती है (type कीवर्ड एक नया प्रकार बनाता है, और यह अंतर्निहित प्रकार के तरीकों को "विरासत" नहीं करता है)।

संबंधित / समान प्रश्न भी देखें:समय के साथ दस्तावेज़ सम्मिलित करते समय डिफ़ॉल्ट तिथि निर्धारित करें। समय क्षेत्र




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB बनाम DynamoDB:आपको क्या जानना चाहिए

  2. मैं कमांड लाइन से MongoDB डेटाबेस कैसे छोड़ूं?

  3. एक क्षेत्र पर अनुक्रमण जो उप-दस्तावेजों की सरणी में है

  4. मोंगोडब में न्यूनतम मूल्य कैसे खोजें?

  5. विंडोज़ पर डोकर मोंगो छवि शुरू करने में असमर्थ