bounty将在5天内到期。此问题的答案有资格获得+50声望奖励。Mike3355正在寻找一个规范答案。
我有一个模型,它创建了一个JSON文档,没有问题,但检索它会导致嵌套的JSON对象为空。
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
}
结构
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"`
}
结果
{
"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"
}
从我读到的。解码也应该Map嵌套值吗?
1条答案
按热度按时间0ve6wy6x1#
JSON?但是the Go MongoDB driver works with BSON
struct标签用于定义Go结构体字段应该如何Map到MongoDB文档字段。
在
Course
结构体中,您使用的是json
标记,但Go中MongoDB驱动程序中的Decode
方法使用bson
标记将文档字段Map到结构体字段。要解决这个问题,您应该将
bson
标记添加到结构体字段,包括嵌套结构体,以指示MongoDB驱动程序如何将文档解码为结构体。请注意,您可以在同一字段中同时使用
bson
和json
标记。bson
标签在与MongoDB交互时使用(例如,在调用.Decode()
时),而json
标签在将JSON格式编组/解编组时使用。此外,确保
bson
标记中的字段名称与MongoDB文档中的字段名称匹配。例如,如果MongoDB文档中的字段名为courseDetails
而不是course_details
,则应将bson
标记更改为bson:"courseDetails"
。