Wie gehe ich mit MongoDB-Updates mit Golangs „omitempty'-Flag um?

Mary-Kate Olsen
Freigeben: 2024-11-24 11:56:16
Original
530 Leute haben es durchsucht

How to Handle MongoDB Updates with Golang's `omitempty` Flag?

Aktualisieren von MongoDB-Feldern mit der Omitempty-Flagge in Golang-Strukturen

Die Omitempty-Flagge in Golang-Strukturen ermöglicht Entwicklern, Felder vom JSON-Marshalling auszuschließen, wenn sie dies getan haben Nullwerte. Dieses Verhalten kann jedoch beim Aktualisieren von MongoDB-Dokumenten zu Herausforderungen führen.

Erwägen Sie ein Coupon-Formular, bei dem einige Felder optional sind. Eine Golang-Struktur, die das Formular darstellt, kann in diesen Feldern Flags zum Auslassen von Leerzeichen enthalten, z. B.:

type Coupon struct {
    Id               int    `json:"id,omitempty" bson:"_id,omitempty"`
    Name             string `json:"name,omitempty" bson:"name,omitempty"`
    Code             string `json:"code,omitempty" bson:"code,omitempty"`
    Description      string `json:"description,omitempty" bson:"description,omitempty"`
    Status           bool   `json:"status" bson:"status"`
    MaxUsageLimit    int    `json:"max_usage_limit,omitempty" bson:"max_usage_limit,omitempty"`
    SingleUsePerUser bool   `json:"single_use_per_user,omitempty" bson:"single_use_per_user,omitempty"`
}
Nach dem Login kopieren

Problem

Das Problem tritt beim Aktualisieren des Formulars auf. Wenn ein zuvor aktiviertes Kontrollkästchen (Bool-Feld) während der Formularübermittlung deaktiviert wird, wird es durch das omitempty-Flag aus der Struktur ausgeschlossen. Folglich wird der Wert im MongoDB-Dokument nicht aktualisiert.

Wenn in einer REST-API-Anfrage nur erforderliche Felder bereitgestellt werden, überschreibt MongoDB gleichermaßen das gesamte Dokument, einschließlich der Werte, die nicht aktualisiert werden sollten.

Lösung

Um dieses Problem zu beheben, müssen die mit omitempty versehenen Felder in geändert werden Hinweise. Dadurch können die Felder einen Nullwert haben, der den Status „nicht aktualisiert“ darstellt:

type Coupon struct {
    Id               *int    `json:"id,omitempty" bson:"_id,omitempty"`
    Name             string `json:"name,omitempty" bson:"name,omitempty"`
    Code             string `json:"code,omitempty" bson:"code,omitempty"`
    Description      string `json:"description,omitempty" bson:"description,omitempty"`
    Status           *bool   `json:"status" bson:"status"`
    MaxUsageLimit    *int    `json:"max_usage_limit,omitempty" bson:"max_usage_limit,omitempty"`
    SingleUsePerUser *bool   `json:"single_use_per_user,omitempty" bson:"single_use_per_user,omitempty"`
}
Nach dem Login kopieren

Bei dieser Änderung zeigt ein Nullzeiger an, dass das Feld nicht aktualisiert werden soll. Wenn ein Nicht-Null-Zeiger bereitgestellt wird, wird sein Wert im MongoDB-Dokument festgelegt. Dadurch wird das Problem bei der Aktualisierung von Bool- und Int-Feldern effektiv gelöst, während das Omitempty-Flag beibehalten wird.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit MongoDB-Updates mit Golangs „omitempty'-Flag um?. 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