Heim >Backend-Entwicklung >Golang >Wie kann ich mit MongoDB in Golang eine Struktur in eine andere Struktur einbetten, ohne Daten zu verlieren?

Wie kann ich mit MongoDB in Golang eine Struktur in eine andere Struktur einbetten, ohne Daten zu verlieren?

Susan Sarandon
Susan SarandonOriginal
2024-11-08 18:28:02507Durchsuche

How to Embed a Struct in Another Struct with MongoDB in Golang Without Losing Data?

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!

Stellungnahme:
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