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

用户的 Golang、mgo 更新详细信息

用户的 Golang、mgo 更新详细信息

Go
Cats萌萌 2021-11-29 16:53:27
我在更新 mongodatabase 上的用户时遇到了一些麻烦。基本上我想通过用户名选择用户而不是编辑其详细信息。我正在使用 Gorilla Mux 和 mgo 连接 MongoDB。这是代码:func ViewUserHandler(w http.ResponseWriter, r *http.Request) {    vars := mux.Vars(r)    username := vars["username"]    session, err := mgo.Dial("mongodb://DATABASE_URL")    if err != nil {        panic(err)    }    defer session.Close()    session.SetMode(mgo.Monotonic, true)    c := session.DB("studnet").C("user")    result := Person{}    // get the user_id using a hidden field when clicked using javascript    err = c.Find(bson.M{"name": username}).One(&result)    if err != nil {        log.Fatal(err)    }    if r.Method == "GET" {        t, _ := template.ParseFiles("profile.html")        t.Execute(w, result)    }    // update the user profile details    if r.Method == "POST" {        r.ParseForm()        // TODO : update the user        selectedUser := bson.M{"name": username}        updatedUser := bson.M{"$set": bson.M{            "Name":      r.Form["username"][0],            "Gender":    r.Form["gender"][0],            "Age":       r.Form["age"][0],            "CreatedAt": time.Now(),        }}        err = c.Update(selectedUser, updatedUser)        if err != nil {            panic(err)        }        http.Redirect(w, r, "/view/"+username, 301)    }}
查看完整描述

2 回答

?
汪汪一只猫

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

好吧,我至少看到了一个问题,那就是区分大小写的查询。因此,如果您的结构在 json 中使用小写键,则必须使用小写键。


// This shoud match 

// against the "Name" property

selectedUser := bson.M{"Name": username}


updatedUser := bson.M{"$set": bson.M{

                "Name":      r.Form["username"][0],

                "Gender":    r.Form["gender"][0],

                "Age":       r.Form["age"][0],

                "CreatedAt": time.Now(),

 }}


查看完整回答
反对 回复 2021-11-29
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

data := model.Data {

            Name:      r.Form["username"][0],

            Gender:    r.Form["gender"][0],

            Age:       r.Form["age"][0],

            CreatedAt:  time.Now(),

        }


selectedUser := bson.M{"name": username}

updatedUser := bson.M{"$push": bson.M{"user": bson.M{"$each": []model.User{data}}}}

err = c.Update(selectedUser, updatedUser)

这将根据匹配的用户名更新用户数组。如果您也可以共享该结构,那就太好了。我已经回答了假设。


查看完整回答
反对 回复 2021-11-29
  • 2 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

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