Heim > Artikel > Backend-Entwicklung > Wie erstelle ich ein Mongo-Dokument, das es nach zwei Strukturen modelliert?
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.
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}, }}, }
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!