Golang mgo寻找

时间:2018-09-03 08:38:59

标签: database mongodb go struct mgo

我尝试在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") }

不要返回其他值!

非常感谢您的光临!

2 个答案:

答案 0 :(得分:4)

您必须导出所有受封送/拆封影响的结构域,因此将其名称更改为以大写字母开头:

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)

答案 1 :(得分:0)

只需在结构名称的第一位使用大写字母! 而且您也不需要

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

您可以写:

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

祝你好运:))