Mgo сингл bson.M результат не работает должным образом
Я создаю ресурс REST API и у меня возникли проблемы со следующим
метод Find, который возвращает все записи, работает нормально, как это
type Resource struct {
*Controller
}
func (self *Resource) Find(res http.ResponseWriter, req *http.Request) {
resource := self.ParseResource(req)
queryParams := req.URL.Query()
query := make(bson.M, 0)
for k, v := range queryParams {
query[k] = v[0]
}
var jsonR []bson.M
coll := self.GetDb().C(resource)
coll.Find(query).All(&jsonR)
self.RenderJson(res, jsonR)
}
Единственный результат не работает, возвращая пустую структуру:
func (self *Resource) FindOne(res http.ResponseWriter, req *http.Request) {
id := mux.Vars(req)["id"]
var jsonR = bson.M{}
coll := self.GetDb().C(self.ParseResource(req))
query := bson.M{"_id": id}
coll.Find(query).One(&jsonR)
self.RenderJson(res, jsonR)
}
Я знаю, что проблема где-то в var jsonR = bson.M{}, но она прекрасно работает в findall любая идея, что я пропустил?
1 ответ
Полностью рабочий код, проблема в том, что bson.ObjectIdHex(id) вместо просто id
func (self *Resource) FindOne(res http.ResponseWriter, req *http.Request) {
id := mux.Vars(req)["id"]
raw := req.URL.String()
raw = strings.TrimPrefix(raw, "/")
resource := strings.TrimSuffix(raw, "/" + id)
var jsonR bson.M
coll := self.GetDb().C(resource)
err := coll.FindId(bson.ObjectIdHex(id)).One(&jsonR)
if err != nil {
panic(err)
}
self.RenderJson(res, jsonR)
}