Einbetten einer Struktur in eine andere Struktur in Golang mit MongoDB
In Golang können Sie durch das Einbetten einer Struktur in eine andere Struktur Felder von erben eingebettete Struktur. Bei der Arbeit mit eingebetteten Strukturen und MongoDB können jedoch Probleme auftreten, die möglicherweise zum Verlust eingebetteter Felddaten führen.
Verstehen des Problems
Stellen Sie sich ein Szenario vor, in dem Sie Sie müssen je nach Benutzerrolle unterschiedliche JSON-Antworten für eine Benutzerressource bereitstellen. Eine Antwort enthält ein „Secret“-Feld, das nur Administratoren angezeigt werden sollte.
In Ihrem aktuellen Code haben Sie separate Strukturen für User und adminUser erstellt, wobei letzteres das „Secret“-Feld enthält. Das Einbetten des Benutzers in adminUser mithilfe der Vererbung (Typ adminUser struct { User; Secret string }) funktioniert jedoch nicht wie erwartet.
Lösung
Um dieses Problem zu beheben, müssen Sie kann das „inline“-Flag des BSON-Pakets verwenden. Durch die Verwendung von „bson:“,inline“ können Sie die Felder der eingebetteten Struktur in die übergeordnete Struktur integrieren.
type adminUser struct { User `bson:",inline"` Secret string `json:"secret,omitempty" bson:"secret,omitempty"` }
Dieser Ansatz ermöglicht Ihnen den Zugriff auf beide Felder der User-Struktur innerhalb der adminUser-Struktur.
Zusätzliche Überlegungen
Beachten Sie, dass die Verwendung von bson:",inline" zu Fehlern durch doppelte Schlüssel führen kann, wenn Lesen aus der Datenbank, da beide Strukturen das Feld „Secret“ enthalten. Um dies zu vermeiden, wird empfohlen, das Feld „Secret“ aus der User-Struktur zu entfernen und es nur in die adminUser-Struktur aufzunehmen. Dadurch wird sichergestellt, dass auf das Feld „Geheimnis“ nur über die adminUser-Struktur zugegriffen werden kann, wodurch das gewünschte Maß an Kontrolle gewährleistet ist.
Das obige ist der detaillierte Inhalt vonWie kann ich mit MongoDB in Golang eine Struktur in eine andere Struktur einbetten, ohne Daten zu verlieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!