定义这个结构

type SymbolMCAddrPort struct {
        ID        bson.ObjectId `bson:"_id,omitempty"`
        Symbol    string
        MCAddr    string
        MCPort    int
}

session, err := mgo.Dial("10.0.0.61")
if err != nil {
    panic(err)
}

defer session.Close()

csap := session.DB("FX").C("MCAddrPortPairs")

如果我说
var resultsSMP bson.M
err = csap.Find(bson.M{"Symbol": "EUR/USD"}).One(&resultsSMP)
fmt.Println(resultsSMP)

我正确地看到
map[_id:ObjectIdHex("56fc34e961fed32064e656b0") Symbol:EUR/USD MCAddr:239.0.0.222 MCPort:345]

但是如果我说
resultsSMP := SymbolMCAddrPort{}
err = csap.Find(bson.M{"Symbol": "EUR/USD"}).One(&resultsSMP)

if err != nil {
    panic(err)
}

fmt.Println(resultsSMP)

我只是看到
{ObjectIdHex("56fc34e961fed32064e656b0")   0}

我注意到ID是正确的,但是我无法获取结构中的其余字段?

最佳答案

使用tags提示Unmarshal每个字段的键名是什么。

type SymbolMCAddrPort struct {
   ID        bson.ObjectId `bson:"_id,omitempty"`
   Symbol    string `bson:"Symbol"`
   MCAddr    string `bson:"MCAddr"`
   MCPort    int `bson:"MCPort"`
}

根据Unmarshal的文档,

小写的字段名称用作每个导出字段的键,
但是可以使用相应的字段标签更改此行为。

因此,默认情况下,当您使用结构时,它期望键为字段名称的小写值。当密钥名称应为其他任何名称时,必须使用字段标签来指定密钥名称。

关于go - 将mongoDB集合查询到结构中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36409158/

10-09 08:28
查看更多