"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > अनमर्शल MongoDB डेटा के लिए mgo का उपयोग करते समय मैं एंबेडेड दस्तावेज़ों में इंटरफ़ेस प्रकारों को कैसे संभाल सकता हूँ?

अनमर्शल MongoDB डेटा के लिए mgo का उपयोग करते समय मैं एंबेडेड दस्तावेज़ों में इंटरफ़ेस प्रकारों को कैसे संभाल सकता हूँ?

2024-11-11 को प्रकाशित
ब्राउज़ करें:321

How Can I Handle Interface Types in Embedded Documents When Using mgo to Unmarshal MongoDB Data?

एमजीओ मॉडल में इंटरफ़ेस प्रकारों को समझना

MongoDB और Go के संदर्भ में, इंटरफ़ेस के साथ मॉडलिंग डेटा गतिशील प्रकृति के कारण चुनौतियां पेश कर सकता है इंटरफ़ेस का. यहां आपके सामने आई समस्या का संक्षिप्त विवरण और एक सुझाया गया समाधान दिया गया है।

इंटरफ़ेस प्रकार के साथ समस्या

MongoDB का दस्तावेज़-आधारित डेटा मॉडल प्रकार प्रदान नहीं करता है एम्बेडेड दस्तावेज़ों के लिए जानकारी. गो संरचनाओं में इंटरफ़ेस प्रकारों वाले MongoDB दस्तावेज़ों को अनमर्शल करने के लिए mgo का उपयोग करते समय, mgo प्रत्येक एम्बेडेड दस्तावेज़ के विशिष्ट प्रकार को निर्धारित नहीं कर सकता है। इसके परिणामस्वरूप त्रुटि उत्पन्न होती है "प्रकार bson.M का मान नोड टाइप करने के लिए निर्दिष्ट नहीं है।"

समाधान: रैपिंग इंटरफ़ेस प्रकार

इस सीमा को संबोधित करने के लिए, एक दृष्टिकोण इंटरफ़ेस प्रकार को एक कस्टम संरचना में लपेटना है जो प्रकार की जानकारी प्रदान करता है। यह एमजीओ को अनमर्शलिंग के दौरान एम्बेडेड दस्तावेज़ के विशिष्ट प्रकार की पहचान करने की अनुमति देता है।

निम्न उदाहरण पर विचार करें:

type NodeWithType struct {
   Node Node `bson:"-"`
   Type string
}

type Workflow struct {
   CreatedAt time.Time
   StartedAt time.Time
   CreatedBy string
   Nodes []NodeWithType
}

SetBSON फ़ंक्शन को कार्यान्वित करना

इस समाधान को पूरा करने के लिए, आपको NodeWithType प्रकार के लिए SetBSON फ़ंक्शन को कार्यान्वित करना होगा। यह फ़ंक्शन टाइप स्ट्रिंग को डीकोड करेगा, संबंधित प्रकार का एक उदाहरण बनाएगा, और इसे अनमर्शल करेगा।

func (nt *NodeWithType) SetBSON(r bson.Raw) error {
   // Decode the "Type" field and determine the Node type
   var typeStr string
   if err := r.Unmarshal(&typeStr); err != nil {
      return err
   }

   // Create a new instance of the Node type based on the type string
   node, ok := reflect.New(reflect.TypeOf(Node).Elem()).Interface().(Node)
   if !ok {
      return errors.New("invalid Node type")
   }

   // Unmarshal the remaining data into the Node instance
   if err := r.Unmarshal(node); err != nil {
      return err
   }

   // Assign the Node instance to the NodeWithType struct
   nt.Node = node
   return nil
}

निष्कर्ष

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

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3