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

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

王林
王林nach vorne
2024-02-14 23:54:10841Durchsuche

如何创建一个 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"
    }
}

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

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
}

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

{
    "email": "[email protected]",
    "first_name": "Test",
    "last_name": "Example"
}

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},
     }},
}

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

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen