Heim > Backend-Entwicklung > Golang > Wie gehe ich mit optionalen Feldern mit „omitempty' in Go um, wenn ich MongoDB-Dokumente aktualisiere?

Wie gehe ich mit optionalen Feldern mit „omitempty' in Go um, wenn ich MongoDB-Dokumente aktualisiere?

Susan Sarandon
Freigeben: 2024-11-24 21:46:36
Original
983 Leute haben es durchsucht

How to Handle Optional Fields with `omitempty` in Go When Updating MongoDB Documents?

Umgang mit optionalen Feldern mit Omitempty- und MongoDB-Updates

Beim Umgang mit Formularen, die optionale Felder enthalten, ist es üblich, diese Felder als leere Zeichenfolgen, falsche boolesche Werte usw. darzustellen nullwertige Ganzzahlen in JSON. Bei Verwendung des omitempty-Flags in Golang-Strukturen werden diese Werte jedoch beim Mapping explizit ignoriert, was zu Problemen beim Aktualisieren von Dokumenten in MongoDB führen kann.

Das Problem:

Erwägen Sie eine Coupon-Struktur in Golang mit als omitempty markierten Feldern:

type Coupon struct {
    Id               int    `json:"id,omitempty" bson:"_id,omitempty"`
    Name             string `json:"name,omitempty" bson:"name,omitempty"`
    Status           bool   `json:"status" bson:"status"`
}
Nach dem Login kopieren

Beim ersten Speichern werden alle nicht leeren Felder erfolgreich in MongoDB gespeichert. Wenn jedoch bei späteren Aktualisierungen ein optionales Feld in einen leeren Wert geändert wurde (z. B. ein deaktiviertes Kontrollkästchen), verhindert das omitempty-Flag, dass der leere Wert in die Struktur abgebildet wird. Infolgedessen kann der Aktualisierungsvorgang den Wert des vorhandenen Felds nicht ändern.

Die Lösung:

Das Problem tritt auf, weil die Typen bool und int nur zwei mögliche Werte haben (falsch und wahr, 0 und ungleich Null). Um der Notwendigkeit gerecht zu werden, drei Zustände darzustellen (nicht aktualisieren, auf „false“ setzen oder auf „true“ setzen) für Bool-Felder und ähnliche Fälle für Int-Felder, sollten die Strukturfelder so geändert werden, dass sie Zeiger verwenden.

type Coupon struct {
    Id               *int    `json:"id,omitempty" bson:"_id,omitempty"`
    Name             string `json:"name,omitempty" bson:"name,omitempty"`
    Status           *bool   `json:"status" bson:"status"`
}
Nach dem Login kopieren

Bei Zeigern stellt ein Nullwert ein ausgelassenes Feld dar. Bei Nicht-Null-Zeigern stellt der Wert, auf den verwiesen wird, den Wert des Felds dar. Somit können die folgenden Szenarien behandelt werden:

  • Um ein Bool-Feld auszuschließen, sollte der *bool-Wert Null sein.
  • Um es auf „false“ zu setzen/aktualisieren, muss es ein sein Zeiger auf einen falschen Wert.
  • Um ihn auf wahr zu setzen/aktualisieren, muss es ein Zeiger auf einen wahren Wert sein Wert.

Durch die Verwendung von Zeigern und dem omitempty-Flag können Sie optionale Felder in Golang-Strukturen effektiv verarbeiten und gleichzeitig sicherstellen, dass Aktualisierungen korrekt durchgeführt werden, ohne vorhandene Werte in MongoDB zu überschreiben.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit optionalen Feldern mit „omitempty' in Go um, wenn ich MongoDB-Dokumente aktualisiere?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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