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

आप Mgo (Go) का उपयोग करके MongoDB में विविध नोड प्रकारों के साथ वर्कफ़्लो कैसे संग्रहीत कर सकते हैं?

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

How Can You Store Workflows with Diverse Node Types in MongoDB using Mgo (Go)?

एमजीओ (गो) में मॉडल के रूप में इंटरफ़ेस: असाइनमेंट त्रुटि को हल करना

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

वैकल्पिक दृष्टिकोण: प्रकार की जानकारी के साथ एम्बेड करना

इस बाधा को दूर करने के लिए, एम्बेडेड नोड्स के भीतर प्रकार की जानकारी को एनकैप्सुलेट करने पर विचार करें। एक नई संरचना, नोडविथटाइप को परिभाषित करें, जिसमें नोड इंटरफ़ेस और विशिष्ट प्रकार का प्रतिनिधित्व करने वाला एक प्रकार फ़ील्ड शामिल है।

टाइप नोडविथटाइप संरचना { नोड नोड `बीएसओएन:"-"` स्ट्रिंग टाइप करें }

कस्टम BSON अनमर्शलिंग

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

func (nt *NodeWithType) SetBSON(r bson.Raw) error { // डिकोड प्रकार फ़ील्ड var टाइपनेम स्ट्रिंग err := bson.Unmarshal(r["Type"], &typeName) यदि त्रुटि !=शून्य { ग़लती से वापसी } // टाइप फ़ील्ड के आधार पर सही प्रकार का एक उदाहरण बनाएं वर नोड नोड प्रकारनाम स्विच करें { मामला "ईमेलनोड": नोड = &ईमेलनोड{} मामला "ट्विटरनोड": नोड = &TwitterNode{} } // बनाए गए उदाहरण में शेष फ़ील्ड को अनमर्शल करें यदि err = node.SetBSON(r[typeName]); त्रुटि != शून्य { ग़लती से वापसी } // बनाए गए इंस्टेंस को नोड फ़ील्ड में असाइन करें एनटी.नोड = नोड शून्य वापसी }

वर्कफ़्लो संरचना में, नोड स्लाइस को नोडविथटाइप के एक स्लाइस से बदलें।

func (nt *NodeWithType) SetBSON(r bson.Raw) error {
   // Decode Type field
   var typeName string
   err := bson.Unmarshal(r["Type"], &typeName)
   if err != nil {
      return err
   }

   // Create an instance of the correct type based on Type field
   var node Node
   switch typeName {
   case "EmailNode":
      node = &EmailNode{}
   case "TwitterNode":
      node = &TwitterNode{}
   }

   // Unmarshal the remaining fields into the created instance
   if err = node.SetBSON(r[typeName]); err != nil {
      return err
   }

   // Assign the created instance to the Node field
   nt.Node = node

   return nil
}
इस दृष्टिकोण के साथ, एमजीओ अब विभिन्न प्रकार के एम्बेडेड नोड्स के साथ वर्कफ़्लो को सफलतापूर्वक ढूंढ और अनमर्शल कर सकता है।

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

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

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

Copyright© 2022 湘ICP备2022001581号-3