Heim > Backend-Entwicklung > Golang > Wie kann ich das Marshaling/Unmarshaling für MongoDB-Typen in Go anpassen?

Wie kann ich das Marshaling/Unmarshaling für MongoDB-Typen in Go anpassen?

DDD
Freigeben: 2024-11-15 02:05:03
Original
518 Leute haben es durchsucht

How to Customize Marshaling/Unmarshaling for MongoDB Types in Go?

Marshalling/Unmarshaling für MongoDB-Typen in Go anpassen

Beim Zugriff auf MongoDB über Go kann es vorkommen, dass Werte währenddessen transformiert werden müssen Marshalling/Unmarshaling. Stellen Sie sich den Fall vor, dass Sie auf das EndDate-Feld zugreifen, das als Zeichenfolge in MongoDB gespeichert ist, es jedoch als Go time.Time-Typ benötigen.

Um solche Szenarien zu bewältigen, können Sie mithilfe des BSON eine benutzerdefinierte Marshalling-/Unmarshaling-Logik implementieren. Getter- und bson.Setter-Schnittstellen. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Erweitern Sie die Datenstruktur: Erweitern Sie den Typ clientConfigData, indem Sie ein neues Feld vom Typ time.Time hinzufügen, gekennzeichnet mit einem bson-Tag von „-“.
type clientConfigData struct {
    SMTPAssoc  int       `bson:"smtp_assoc"`
    PlanType   string    `bson:"plan_type"`
    EndDateStr string    `bson:"end_date"`
    EndDate    time.Time `bson:"-"`
}
Nach dem Login kopieren
  1. Benutzerdefiniert implementieren Marshalling/Unmarshaling: Erstellen Sie die Methoden SetBSON() und GetBSON(), um benutzerdefiniertes Marshalling/Unmarshaling zu handhaben.
const endDateLayout = "2006-01-02 15:04:05" // Specify your preferred date layout

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
}
Nach dem Login kopieren

Füllen Sie in SetBSON() die Struktur mit dem rohen MongoDB-Wert und analysieren Sie sie den EndDateStr in eine time.Time. Legen Sie in GetBSON() den EndDateStr fest und geben Sie ihn zurück.

  1. Benutzerdefiniertes Marshaling/Unmarshaling verwenden:

Denken Sie beim Suchen oder Einfügen von Dokumenten an die Verwendung die benutzerdefinierte Marshalling-/Unmarshaling-Logik durch Angabe des clientConfigData-Typs.

var configRes = new(clientConfigData)
err := clientDB.
    C(clientConfigCollection).
    Find(bson.M{}).
    One(&configRes)
if err != nil {
    return nil, errors.Wrap(err, "finding config collection")
}
Nach dem Login kopieren

Von Durch die Implementierung von benutzerdefiniertem Marshalling/Unmarshaling können Sie nahtlos mit MongoDB-Werten arbeiten, die bestimmte Typkonvertierungen erfordern. Denken Sie daran, sowohl SetBSON() als auch GetBSON() zu verarbeiten, um sowohl Marshalling als auch Unmarshalling abzudecken.

Das obige ist der detaillierte Inhalt vonWie kann ich das Marshaling/Unmarshaling für MongoDB-Typen in Go anpassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage