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

我在更新 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)

    }

}


Cats萌萌
浏览 148回答 2
2回答

汪汪一只猫

好吧,我至少看到了一个问题,那就是区分大小写的查询。因此,如果您的结构在 json 中使用小写键,则必须使用小写键。// This shoud match // against the "Name" propertyselectedUser := 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(), }}

慕运维8079593

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)这将根据匹配的用户名更新用户数组。如果您也可以共享该结构,那就太好了。我已经回答了假设。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go