Heim > Backend-Entwicklung > Golang > Wie erstelle ich ein Mongo-Dokument, das es nach zwei Strukturen modelliert?

Wie erstelle ich ein Mongo-Dokument, das es nach zwei Strukturen modelliert?

王林
Freigeben: 2024-02-14 23:54:10
nach vorne
952 Leute haben es durchsucht

如何创建一个 Mongo 文档,在两个结构之后对其进行建模?

In diesem Artikel stellt Ihnen der PHP-Editor Baicao vor, wie Sie ein Dokument in einer Mongo-Datenbank erstellen und es zwischen zwei verschiedenen Strukturen modellieren. In der Mongo-Datenbank ist ein Dokument eine Grundeinheit zum Speichern und Organisieren von Daten, ähnlich einer Zeile oder einem Dokument in einer relationalen Datenbank. Um die Flexibilität und Skalierbarkeit von Mongo besser zu nutzen, können wir die Struktur des Dokuments so planen und gestalten, dass es unseren spezifischen Anforderungen entspricht, bevor wir es erstellen. Als Nächstes erfahren Sie im Detail, wie Sie ein Mongo-Dokument erstellen und es zwischen verschiedenen Strukturen modellieren.

Frageninhalt

Ich habe eine einfache API mithilfe der Gingonic- und Mongo-Datenbank erstellt. Ich poste ein einfaches Objekt wie dieses an die API, um ein Mongo-Dokument mit derselben Form zu erstellen. Ich habe viele Beispiele gefunden, die Arrays verwenden, aber keine Karten. Ich habe dazu den Schnellstart unter www.mongodb.com befolgt.

{
    "email": "[email protected]",
    "profile": {
        "first_name": "Test",
        "last_name": "Example"
    }
}
Nach dem Login kopieren

Ich habe diese beiden Go-Strukturen (für Benutzer- und Konfigurationsdateien)

type User struct {
    ID       primitive.ObjectID `json:"_id,omitempty" bson:"_id,omitempty"`
    Email    string             `json:"email" binding:"required,email" bson:"email"`
    Profile  *Profile           `json:"profile" binding:"required" bson:"profile,inline"`
}
type Profile struct {
    FirstName string `json:"first_name" binding:"required,min=3" bson:"first_name"`
    LastName  string `json:"last_name" binding:"required" bson:"last_name"`
}
Nach dem Login kopieren

Das ist meine Kreationsfunktion:

func (dbc *Dbc) CreateUser(user *models.User) error {
    newUser := models.User{
        Email:    user.Email,
        Profile:  &models.Profile{
                    FirstName: user.Profile.FirstName, 
                    LastName: user.Profile.LastName},
    }
    _, err := dbc.GetUserCollection().InsertOne(dbc.ctx, newUser)
    return err
}
Nach dem Login kopieren

Es wird ein Dokument erstellt, aber so (also keine Unterdokumentprofile):

{
    "email": "[email protected]",
    "first_name": "Test",
    "last_name": "Example"
}
Nach dem Login kopieren

Das Erstellen neuer Dokumente ohne Go-Strukturen funktioniert hervorragend. Wie modelliert man also ein JSON-Objekt mithilfe einer Go-Struktur, die Unterdokumente enthält? Ich kann nicht viele Beispiele finden, nicht einmal auf Github. Möchte mich jemand in die richtige Richtung weisen?

newUser := bson.D{
    bson.E{Key: "email", Value: user.Email},
     bson.E{Key: "profile", Value: bson.D{
    bson.E{Key: "first_name", Value: user.Profile.FirstName},
    bson.E{Key: "last_name", Value: user.Profile.LastName},
     }},
}
Nach dem Login kopieren

Problemumgehung

Sie haben das bson:"profile,inline"-Tag verwendet, um es inline anzuweisen, deshalb haben Sie das Filialdokument nicht in Ihrer Datenbank. Es tut genau das, was Sie von ihm verlangen.

Wenn Sie die Konfigurationsdatei nicht einbetten möchten, aber Unterdokumente haben, entfernen Sie die Option ,inline:

Profile *Profile `json:"profile" binding:"required" bson:"profile"`
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie erstelle ich ein Mongo-Dokument, das es nach zwei Strukturen modelliert?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage