Heim > Artikel > Backend-Entwicklung > Verwenden Sie mongo'd db .Decode(&dto), um verschachtelte Strukturen abzubilden
Der PHP-Editor Zimo stellt Ihnen heute eine Methode zum Zuordnen verschachtelter Strukturen mithilfe von mongo'd db .Decode(&dto) vor. Während des Entwicklungsprozesses stoßen wir häufig auf Situationen, in denen wir verschachtelte Strukturen aus der Datenbank dekodieren und in die entsprechenden Datentransferobjekte (DTO) abbilden müssen. Die Dekodierfunktion von mongo'db kann uns helfen, diesen Prozess zu vereinfachen. Wir müssen nur die zu dekodierende Struktur und das Ziel-DTO-Objekt übergeben, und die Dekodierung und Zuordnung kann automatisch durchgeführt werden. Diese Methode ist einfach und effizient und kann die Entwicklungseffizienz erheblich verbessern. Als Nächstes stellen wir detailliert vor, wie diese Methode zum Implementieren der Zuordnung verschachtelter Strukturen verwendet wird.
Ich habe ein Modell, das JSON-Dokumente ohne Probleme erstellt, aber das Abrufen führt dazu, dass das verschachtelte JSON-Objekt leer ist.
func (r *courserepo) getcoursebyid(ctx context.context, id string) (course, error) { clog := log.getloggerfromcontext(ctx) var course course objid, err := primitive.objectidfromhex(id) if err != nil { return course, err } filter := bson.m{"_id": objid} err = r.collection.findone(ctx, filter).decode(&course) if err != nil { clog.errorctx(err, log.ctx{"msg": "an error occurred while finding a course"}) return course, err } return course, nil }
Struktur
type course struct { objectid primitive.objectid `bson:"_id, omitempty"` id string `json:"id"` title string `json:"title"` description string `json:"description"` lessons string `json:"lessons"` duration string `json:"duration"` details struct { title string `json:"title"` instructor string `json:"instructor"` introduction string `json:"introduction"` learn string `json:"learn"` topics string `json:"topics"` prerequisites string `json:"prerequisites"` goal string `json:"goal"` additionaldetails string `json:"additionaldetails"` highleveloverview string `json:"highleveloverview"` } `json:"course_details"` }
Ergebnisse
{ "data": { "ObjectId": "64953ac1bf06bfdd7936cad8", "id": "", "title": "Java Algorithms", "description": "An awesome course", "lessons": "4", "duration": "10 hours", "course_details": { "title": "", "instructor": "", "introduction": "", "learn": "", "topics": "", "prerequisites": "", "goal": "", "additionalDetails": "", "highLevelOverview": "" } }, "metadata": "none" }
Sollten nach dem, was ich gelesen habe, auch verschachtelte Kartenwerte dekodiert werden?
json? Aber der go mongodb-Treiber funktioniert mit bson
Structure-Tag wird verwendet, um zu definieren, wie Go-Strukturfelder Mongodb-Dokumentfeldern zugeordnet werden sollen.
In der Struktur course
verwenden Sie das Tag json
, aber den Treiber decode
-Methode course
结构中,您使用 json
标签,但是 decode
方法使用 bson
des Programms verwendet das
bson
Um dieses Problem zu beheben, sollten Sie den Tag
type Course struct { ObjectId primitive.ObjectID `bson:"_id,omitempty" json:"ObjectId"` Id string `bson:"id" json:"id"` Title string `bson:"title" json:"title"` Description string `bson:"description" json:"description"` Lessons string `bson:"lessons" json:"lessons"` Duration string `bson:"duration" json:"duration"` Details struct { Title string `bson:"title" json:"title"` Instructor string `bson:"instructor" json:"instructor"` Introduction string `bson:"introduction" json:"introduction"` Learn string `bson:"learn" json:"learn"` Topics string `bson:"topics" json:"topics"` Prerequisites string `bson:"prerequisites" json:"prerequisites"` Goal string `bson:"goal" json:"goal"` AdditionalDetails string `bson:"additionalDetails" json:"additionalDetails"` HighLevelOverview string `bson:"highLevelOverview" json:"highLevelOverview"` } `bson:"course_details" json:"course_details"` }
bson
和 json
标签。 bson
标签在与 mongodb 交互时使用(例如,当调用 .decode()
时),而 json
Beachten Sie, dass Sie sowohl - als auch json
-Tags im selben Feld haben können. Das Tag wird bei der Interaktion mit Mongodb verwendet (z. B. beim Aufruf von .decode()
), während das Tag json
beim Marshalling/Unmarshaling in das JSON-Format verwendet wird. bson
标记中的字段名称与 mongodb 文档中的字段名称匹配。例如,如果 mongodb 文档中的字段名为 coursedetails
而不是 course_details
,则应将 bson
标记更改为 bson:"coursedetails"
coursedetails
statt course_details
heißt, sollte das 🎜-Tag in bson:"coursedetails"
geändert werden . 🎜Das obige ist der detaillierte Inhalt vonVerwenden Sie mongo'd db .Decode(&dto), um verschachtelte Strukturen abzubilden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!