将 mongo 数据库集合查询到结构中
Querying a mongo DB collection into a struct
定义这个结构
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 to hint Unmarshal每个字段的键名。
type SymbolMCAddrPort struct {
ID bson.ObjectId `bson:"_id,omitempty"`
Symbol string `bson:"Symbol"`
MCAddr string `bson:"MCAddr"`
MCPort int `bson:"MCPort"`
}
来自 Unmarshal、
的文档
The lowercased field name is used as the key for each exported field,
but this behavior may be changed using the respective field tag.
所以默认情况下,当您使用结构时,它期望键是字段名称的小写值。当键名应该是任何其他字段标签时,必须使用字段标签来指定键名。
定义这个结构
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 to hint Unmarshal每个字段的键名。
type SymbolMCAddrPort struct {
ID bson.ObjectId `bson:"_id,omitempty"`
Symbol string `bson:"Symbol"`
MCAddr string `bson:"MCAddr"`
MCPort int `bson:"MCPort"`
}
来自 Unmarshal、
的文档The lowercased field name is used as the key for each exported field, but this behavior may be changed using the respective field tag.
所以默认情况下,当您使用结构时,它期望键是字段名称的小写值。当键名应该是任何其他字段标签时,必须使用字段标签来指定键名。