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

使用 go 在 mongodb 中重复 Id

使用 go 在 mongodb 中重复 Id

Go
慕运维8079593 2021-11-15 15:37:15
我正在尝试使用 Mongodb 在 Go 中编写一个简单的 Web 应用程序。我创建了一个简约的简单模型/控制器设置。我可以使用带有 url "/user" 的 POST 和诸如 '{"pseudo": "bobby1"}' 之类的数据创建新用户。用户已创建。但是,当查看 Mongodb shell 时,我得到:{ "_id" : ObjectId("5616d1ea56ca4dbc03bb83bc"), "id" : ObjectId("5616d1ea5213c64824000001"), "pseudo" : "bobby2"}“id”字段是来自我的结构的字段,而“_id”字段是来自 Mongodb 的字段。通过查看不同的示例代码,看起来我可以使用自己来自 Mongodb 的代码,但我找不到如何操作.. >< 由于“id”仅由我使用,因此我无法通过以下方式找到用户他们的 ID,因为我没有那个……更多,当我执行 GET /user 时,它返回用户的完整列表,我只得到:{"id":"5616d1ea5213c64824000001","pseudo":"bobby2"不是“真正的”Mongodb Id...谢谢,这是代码:模型/用户.goconst userCollection = "user"// Get our collectionvar C *mgo.Collection = database.GetCollection(userCollection)// User represents the fields of a user in dbtype User struct {    Id     bson.ObjectId `json:"id"i bson:"_id,omitempty"`    Pseudo string        `json:"pseudo" bson:"pseudo"`}// it will return every users in the dbfunc UserFindAll() []User {    var users []User    err := C.Find(bson.M{}).All(&users)    if err != nil {        panic(err)    }    return users}// UserFIndId return the user in the db with// corresponding IDfunc UserFindId(id string) User {    if !bson.IsObjectIdHex(id) {        s := fmt.Sprintf("Id given %s is not valid.", id)        panic(errors.New(s))    }    oid := bson.ObjectIdHex(id)    u := User{}    if err := C.FindId(oid).One(&u); err != nil {        panic(err)    }    return u}// UserCreate create a new user on the dbfunc UserCreate(u *User) {    u.Id = bson.NewObjectId()    err := C.Insert(u)    if err != nil {        panic(err)    }}控制器/用户.go/ GetAll returns all usersfunc (us *UserController) GetAll(w http.ResponseWriter, request *http.Request) {    //  u := model.User{    //      ID:     "987654321",    //      Pseudo: "nikko",    //  }    users := model.UserFindAll()    bu, err := json.Marshal(users)    if err != nil {        fmt.Printf("[-] Error while marshaling user struct : %v\n", err)        w.Write([]byte("Error Marshaling"))        w.WriteHeader(404)        return    }
查看完整描述

1 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

看起来你的结构标签中有一个流浪字符:


type User struct {

    Id     bson.ObjectId `json:"id"i bson:"_id,omitempty"`

    Pseudo string        `json:"pseudo" bson:"pseudo"`

}

这i不应该存在后json:"id"。它应该是:


type User struct {

    Id     bson.ObjectId `json:"id" bson:"_id,omitempty"`

    Pseudo string        `json:"pseudo" bson:"pseudo"`

}


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

添加回答

举报

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