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"` }
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"` }
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!