Heim >Backend-Entwicklung >Golang >Wie modelliere ich eingebettete Knoten verschiedener Typen in MongoDB mit mgo mithilfe von Schnittstellen?

Wie modelliere ich eingebettete Knoten verschiedener Typen in MongoDB mit mgo mithilfe von Schnittstellen?

DDD
DDDOriginal
2024-10-26 10:34:29835Durchsuche

How to Model Embedded Nodes of Different Types in MongoDB with mgo using Interfaces?

Schnittstellentypen als Modelle in mgo (Go)

Problem:

In einem Szenario Bei Arbeitsabläufen und eingebetteten Knoten verschiedener Typen führt die Verwendung einer Schnittstelle zum Modellieren von Knoten in MongoDB mit mgo zu einem Fehler. Der Fehler tritt auf, weil mgo die eingebetteten Node-Dokumente ohne Typinformationen nicht entmarshalieren kann.

Lösung:

Um diese Einschränkung zu überwinden, sollten Sie erwägen, eine Struktur zu definieren, die beide Node-Typen enthält und die zugehörigen Typinformationen:

<code class="go">type NodeWithType struct {
   Node Node `bson:"-"`
   Type string
}</code>

Verwenden Sie innerhalb der Workflow-Struktur ein Array von NodeWithType-Strukturen, um die Knoten zu speichern:

<code class="go">type Workflow struct {
   CreatedAt time.Time
   StartedAt time.Time
   CreatedBy string
   Nodes []NodeWithType
}</code>

Um die Daten korrekt zu dekodieren, implementieren Sie die SetBSON-Funktion auf NodeWithType:

<code class="go">func (nt *NodeWithType) SetBSON(r bson.Raw) error {
   // Decode the type string
   typeStr := r.String()

   // Create a new Node value based on the type string
   switch typeStr {
   case "EmailNode":
      nt.Node = &EmailNode{}
   case "TwitterNode":
      nt.Node = &TwitterNode{}
   default:
      return errors.New("Unknown node type")
   }

   // Unmarshal the remaining data to the Node value
   bsonBytes, err := bson.Marshal(r.Body)
   if err != nil {
      return err
   }
   return bson.Unmarshal(bsonBytes, nt.Node)
}</code>

Dieser Ansatz ermöglicht es mgo, die eingebetteten Knoten basierend auf den in der NodeWithType-Struktur gespeicherten Typinformationen korrekt zu entmarshalieren.

Das obige ist der detaillierte Inhalt vonWie modelliere ich eingebettete Knoten verschiedener Typen in MongoDB mit mgo mithilfe von Schnittstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn