用go的mgo来使用mongo 碰到的问题总结:
struct tag
如果需要获得 id ,那么 需要将 id定义为 bson.ObjectId
类型
type Person struct {
Id bson.ObjectId `bson:"_id,omitempty" json:"-"`
FirstName string `bson:"firstName" json:"firstName"`
MiddleName string `bson:"middleName,omitempty" json:"middleName,omitempty"`
LastName string `bson:"lastName" json:"lastName"`
Inserted time.Time `bson:"inserted" json:"-"`
}
使用 id remove
因为使用了go的模板,所以在 前端传到后端的过程中造成直接传值错误,所以需要先将得到的 id 进行处理
直接将id传到后端的样子:ObjectIdHex("57be5b3c42d8b3683704c54e")
这个样子是使用了 bson.ObjectId
的 string()
方法
// String returns a hex string representation of the id.
// Example: ObjectIdHex("4d88e15b60f486e428412dc9").
func (id ObjectId) String() string {
return fmt.Sprintf(`ObjectIdHex("%x")`, string(id))
}
但是我们需要的只是 4d88e15b60f486e428412dc9
这部分,
- 在模板中加入自定义方法hex, 进行转换
"hex": func(val bson.ObjectId) string {
return val.Hex()
},
然后将这个id 传到后台后用 bson.ObjectIdHex()
再包装,然后调用删除方法
err = db.C("info").RemoveId(bson.ObjectIdHex(id))
或
err := collection.Remove(bson.M{"_id": id})