【问题标题】:Golang mgo FindingGolang mgo 查找
【发布时间】:2018-09-03 08:38:58
【问题描述】:

我尝试在 MongoDB 中找到我的用户,但是当我运行此代码时:

type Person struct {
    Id bson.ObjectId `bson:"_id,omitempty"`//`json:"id" bson:"_id,omitempty"`
    username string `json:"username" bson:"username"`
    score string `json:"score" bson:"score"`
    level string `json:"level" bson:"level"`
}

result := Person{}
var id = "5b8a45912ed6f24d945bee38"
err = c.Find(bson.M{"_id":bson.ObjectIdHex(id)}).Select(bson.M{"username": 1, "score":1, "level": 1}).One(&result)

fmt.Println(result)

它告诉我:

{ObjectIdHex("5b8a45912ed6f24d945bee38") }

并且不要返回其他值!

非常感谢您的宝贵时间!

【问题讨论】:

标签: database mongodb go struct mgo


【解决方案1】:

您必须导出所有受编组/解组的结构字段,因此将其名称更改为以大写字母开头:

type Person struct {
    Id       bson.ObjectId `bson:"_id,omitempty"`//`json:"id" bson:"_id,omitempty"`
    Username string        `json:"username" bson:"username"`
    Score    string        `json:"score" bson:"score"`
    Level    string        `json:"level" bson:"level"`
}

另请注意,要通过 ID 查找文档,您可以使用 Collection.FindId()

err = c.FindId(bson.ObjectIdHex(id)).
    Select(bson.M{"username": 1, "score":1, "level": 1}).One(&result)

【讨论】:

  • 我们可以谈谈邮件或不和谐吗?!请?能给个id吗?!
  • @JustinJohnson 谈什么?在这里问。
【解决方案2】:

只是你应该在结构名称的第一个使用大写字母! 而且你也不需要

 Select(bson.M{"username": 1, "score":1, "level": 1})

你可以写:

err = c.FindId(bson.ObjectIdHex(id)).One(&result)

祝你好运:))

【讨论】:

  • "+1" 非常感谢
  • 你用 Go 做后端吗?
  • 不客气!是的,我使用 GO!因为我的工作是最好的! :))
猜你喜欢
  • 2018-04-16
  • 2017-11-02
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
  • 2015-03-31
  • 2016-01-07
  • 2015-12-30
  • 1970-01-01
相关资源
最近更新 更多