2016-04-04 5 views
0

Определения этой структурыЗапрашивания коллекции Монго DB в структуры

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} 

Хочу отметить, что идентификатор правильно, но я не могу получить остальную часть полей в структуры?

ответ

1

Используйте tags, чтобы подсказать Unmarshal, какие имена клавиш для каждого поля.

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

Из документации Unmarshal,

строчного имя поля используются в качестве ключа для каждого экспортируемого поля, , но такое поведение может быть изменено с помощью соответствующего поля тега.

Так, по умолчанию, когда вы используете struct, он ожидает, что ключи будут содержать нижние значения имен полей. Когда имя ключа должно быть чем-то другим, теги поля должны использоваться для указания имени ключа.

+1

Спасибо, что работает! – Ivan