【问题标题】:Can't get FindId to work (GO + MGO)无法让 FindId 工作(GO + MGO)
【发布时间】:2014-10-21 00:19:06
【问题描述】:

不知道这里发生了什么......但我有一段时间试图完成一个简单的操作。我是 GO 新手(试图从 Node 切换),所以它可能是 Type 的东西......

User struct {
        ID_ bson.ObjectId `bson:"_id,omitempty" json:"_id,omitempty"`
        UTC time.Time     `bson:"utc,omitempty" json:"utc,omitempty"`
        USR string        `bson:"usr,omitempty" json:"usr,omitempty"`
        PWD string        `bson:"pwd,omitempty" json:"pwd,omitempty"`
    }
func save(w http.ResponseWriter, r *http.Request) {
  m := s.Copy()
  defer m.Close()
  user := m.DB("0").C("user")
  var a User
  json.NewDecoder(r.Body).Decode(&a)
  err := user.FindId(a.ID_)
  if err != nil {
    panic(err)
  }
}

这会返回以下错误

http: panic serving [::1]:53092: &{{0 0} 0xc208062600 {{0.user [{_id TE?????}] 0 0 ?
reflect.Value? 0 <nil> {?reflect.Value? ?reflect.Value? ?reflect.Value? false false [] 0}     
false []} 0.25 0}}

当我跑步时:

a.ID_.Valid()

我得到“真实”。

附言。我可以让它工作:

func user(w http.ResponseWriter, r *http.Request) {
  m := s.Copy()
  defer m.Close()
  user := m.DB("0").C("user")
  a := &User{ID_:bson.NewObjectId(), UTC:time.Now()}
  b, _ := json.Marshal(a)
  user.Insert(a)
}

任何帮助将不胜感激。

【问题讨论】:

  • 我是。我粘贴了上面的错误。它来自这一行 user.FindId(a.ID_)。我正在苦苦挣扎,因为 a.ID_ 是一个有效的 ObjectId。
  • 我是个菜鸟……你说得对。谢谢。随意把它放在答案中,我会接受它。

标签: go mgo


【解决方案1】:

FindId 方法返回 Query,而不是错误。调用查询One方法获取文档。

【讨论】:

    【解决方案2】:

    根据文档http://godoc.org/labix.org/v2/mgo#Collection.FindId

    FindId 返回一个 Query 结构,然后您可以调用它的任何函数。 FindId 不返回错误。

    试试

    var userDoc interface{}
    if err := user.FindId(a.ID_).One(&userDoc); err != nil {
      panic(err)
    }
    

    您可以使用您为用户使用的任何结构更改interface{}

    【讨论】:

      猜你喜欢
      • 2014-09-11
      • 1970-01-01
      • 2020-02-23
      • 2014-12-26
      • 2017-12-22
      • 2012-02-28
      • 2015-12-01
      • 2012-01-29
      • 2014-12-16
      相关资源
      最近更新 更多