Maison >développement back-end >Golang >Utilisez mongo'd db .Decode(&dto) pour cartographier les structures imbriquées
L'éditeur PHP Zimo vous présente aujourd'hui une méthode de mappage de structures imbriquées à l'aide de mongo'd db .Decode(&dto). Au cours du processus de développement, nous rencontrons souvent des situations dans lesquelles nous devons décoder et mapper des structures imbriquées de la base de données vers les objets de transfert de données (DTO) correspondants. La fonction Decode de mongo'db peut nous aider à simplifier ce processus. Il suffit de transmettre la structure à décoder et l'objet DTO cible, et le décodage et le mappage peuvent être automatiquement effectués. Cette méthode est simple et efficace et peut grandement améliorer l’efficacité du développement. Ensuite, nous présenterons en détail comment utiliser cette méthode pour implémenter le mappage de structures imbriquées.
J'ai un modèle qui crée des documents json sans problème, mais sa récupération entraîne le fait que l'objet json imbriqué est vide.
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 }
Structure
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"` }
Résultats
{ "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" }
D'après ce que j'ai lu, devrait-il également décoder les valeurs imbriquées de la carte ?
json ? Mais le pilote go mongodb fonctionne avec bson
La balise Structure est utilisée pour définir comment les champs de structure doivent être mappés aux champs du document MongoDB.
Dans la structure course
, vous utilisez la balise json
, mais le decode
du programme course
结构中,您使用 json
标签,但是 decode
方法使用 bson
utilise la balise
bson
Pour résoudre ce problème, vous devez ajouter la balise
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
Notez que vous pouvez avoir à la fois les balises et json
sur le même champ. La balise est utilisée lors de l'interaction avec mongodb (par exemple, lors de l'appel de .decode()
), tandis que la balise json
est utilisée lors du marshalling/unmarshaling au format json. bson
标记中的字段名称与 mongodb 文档中的字段名称匹配。例如,如果 mongodb 文档中的字段名为 coursedetails
而不是 course_details
,则应将 bson
标记更改为 bson:"coursedetails"
coursedetails
au lieu de course_details
, la balise 🎜 doit être remplacée par bson:"coursedetails"
. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!