我正在尝试使用 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...
谢谢,
这是代码:
模型/用户.go
const userCollection = "user"
// Get our collection
var C *mgo.Collection = database.GetCollection(userCollection)
// User represents the fields of a user in db
type User struct {
Id bson.ObjectId `json:"id"i bson:"_id,omitempty"`
Pseudo string `json:"pseudo" bson:"pseudo"`
}
// it will return every users in the db
func 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 ID
func 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 db
func UserCreate(u *User) {
u.Id = bson.NewObjectId()
err := C.Insert(u)
if err != nil {
panic(err)
}
}
控制器/用户.go
/ GetAll returns all users
func (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
}
jeck猫
相关分类