Mgo单bson.M结果工作不正常

Mgo单bson.M结果工作不正常,go,bson,mgo,Go,Bson,Mgo,我正在构建一个资源RESTAPI,但有以下问题 返回所有记录的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(bso

我正在构建一个资源RESTAPI,但有以下问题

返回所有记录的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中它工作得很好
知道我遗漏了什么吗?

完全正常工作的代码,问题是bson.objectedhex(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)
    }

虽然这与你的问题是正交的,但这个/自我在围棋中并不常见: