为了账号安全,请及时绑定邮箱和手机立即绑定

bson 无法使用 bson:"omitempty" struct 标签解码为 nil 值

bson 无法使用 bson:"omitempty" struct 标签解码为 nil 值

Go
牛魔王的故事 2022-12-26 16:43:50
我有一个结构:type User struct {    ID        primitive.ObjectID `json:"id" bson:"_id,omitempty"`    Username  *string            `json:"username" bson:"username,omitempty"`    FirstName *string            `json:"firstName" bson:"first_name,omitempty"`    LastName  *string            `json:"lastName" bson:"last_name,omitempty"`    Email     *string            `json:"email" bson:"email,omitempty"`    GoogleID  *string            `json:"googleID" bson:"google_id,omitempty"`    PageURLs  []string           `json:"pageURLs" bson:"pages"`    Schema    int                `json:"-" bson:"schema"` // omitted from graphql}我正在调用这段代码:updateOption := options.FindOneAndUpdate().SetUpsert(true)updateData := bson.M{"$set": *user}filter := bson.M{"google_id": user.GoogleID}// updated user will have Iderr = findOneUserAndUpdate(context.TODO(), filter, updateData, updateOption).Decode(updatedUser)使用以下用户:var testFirstname = "first"var testLastname = "last"var testEmail = "test@gmail.com"var testGoogleID = "abc123"testUser = &model.User{    FirstName: &testFirstname,    LastName:  &testLastname,    Email:     &testEmail,    GoogleID:  &testGoogleID,    PageURLs:  []string{},    Schema:    1,}但我收到此错误消息:无法解码为零值。这可能是因为指针为零,但在这种情况下,omitempty 构建标记应该只省略该字段。为什么会失败呢?
查看完整描述

2 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

updatedUser 不能为 nil,你至少需要给它一个空结构来解码。



查看完整回答
反对 回复 2022-12-26
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

似乎updateData := bson.M{"$set": *user}是无效的字符串。你可以尝试updateData := bson.M{"$set": &user}这似乎工作。



查看完整回答
反对 回复 2022-12-26
  • 2 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信