Heim > Backend-Entwicklung > Golang > Wie implementiert man benutzerdefiniertes BSON-Marshalling für komplexe Strukturen in MongoDB?

Wie implementiert man benutzerdefiniertes BSON-Marshalling für komplexe Strukturen in MongoDB?

Susan Sarandon
Freigeben: 2024-12-03 07:07:10
Original
601 Leute haben es durchsucht

How to Implement Custom BSON Marshalling for Complex Structures in MongoDB?

Benutzerdefiniertes BSON-Marshalling für komplexe Strukturen

Beim Umgang mit benutzerdefinierten Datenstrukturen, die nicht standardmäßiges Marshalling erfordern, Übergang von JSON zu BSON in MongoDB kann eine Herausforderung sein. Dieser Artikel führt Sie durch die Anpassung des BSON-Marshallings für komplexe Strukturen und bietet eine äquivalente Implementierung zur in der Frage beschriebenen JSON-Marshalling-Methode.

Benutzerdefinierte BSON-Schnittstellen

Benutzerdefiniertes BSON Beim Marshalling werden zwei Schnittstellen implementiert: Getter und Setter. Die Getter-Schnittstelle definiert, wie ein Objekt in BSON dargestellt werden soll, während die Setter-Schnittstelle angibt, wie ein Objekt aus BSON initialisiert werden soll.

Benutzerdefinierte Währungsstruktur

Berücksichtigen Sie die Währungsstruktur aus der ursprünglichen Frage:

type Currency struct {
    value        decimal.Decimal //The actual value of the currency.
    currencyCode string          //The ISO currency code.
}
Nach dem Login kopieren

In diesem Szenario möchten Sie den Marshalling-Prozess anpassen, um einen bestimmten BSON auszugeben Darstellung.

Getter und Setter implementieren

Um dies zu erreichen, implementieren Sie die Getter- und Setter-Schnittstellen wie folgt:

// GetBSON implements bson.Getter.
func (c Currency) GetBSON() (interface{}, error) {
    f := c.Value().Float64()
    return struct {
        Value        float64 `json:"value" bson:"value"`
        CurrencyCode string  `json:"currencyCode" bson:"currencyCode"`
    }{
        Value:        f,
        CurrencyCode: c.currencyCode,
    }, nil
}

// SetBSON implements bson.Setter.
func (c *Currency) SetBSON(raw bson.Raw) error {

    decoded := new(struct {
        Value        float64 `json:"value" bson:"value"`
        CurrencyCode string  `json:"currencyCode" bson:"currencyCode"`
    })

    bsonErr := raw.Unmarshal(decoded)

    if bsonErr == nil {
        c.value = decimal.NewFromFloat(decoded.Value)
        c.currencyCode = decoded.CurrencyCode
        return nil
    } else {
        return bsonErr
    }
}
Nach dem Login kopieren

Verwendung :

Nachdem die Getter- und Setter-Implementierungen vorhanden sind, können Sie jetzt ein Marshalling durchführen Währungsstruktur in BSON mithilfe der Marshal-Methode der MGO-Bibliothek. Beispiel: In der Produktstruktur:

type Product struct {
    Name  string
    Code  string
    Price currency.Currency
}
Nach dem Login kopieren

Benutzerdefiniertes BSON-Marshalling wird automatisch angewendet, wenn eine Produktstruktur gemarshallt wird, die ein Währungsfeld enthält.

Das obige ist der detaillierte Inhalt vonWie implementiert man benutzerdefiniertes BSON-Marshalling für komplexe Strukturen in MongoDB?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage