【问题标题】:Mgo single bson.M result not properly workingMgo 单 bson.M 结果无法正常工作
【发布时间】:2014-09-11 19:08:00
【问题描述】:

我正在构建资源 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 中运行良好 知道我错过了什么吗?

【问题讨论】:

标签: go bson mgo


【解决方案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)
    }

【讨论】:

    猜你喜欢
    • 2016-11-19
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 2018-08-09
    • 2011-09-13
    相关资源
    最近更新 更多