2016-04-04 5 views
0

diese Struktur definierenAbfragen eines Mongo DB-Sammlung in einer Struktur

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") 

Wenn ich

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

sagen, dass ich richtig

map[_id:ObjectIdHex("56fc34e961fed32064e656b0") Symbol:EUR/USD MCAddr:239.0.0.222 MCPort:345] 

sehen Aber wenn ich sage,

resultsSMP := SymbolMCAddrPort{} 
err = csap.Find(bson.M{"Symbol": "EUR/USD"}).One(&resultsSMP) 

if err != nil { 
    panic(err) 
} 

fmt.Println(resultsSMP) 

Ich sehe nur

{ObjectIdHex("56fc34e961fed32064e656b0") 0} 

Ich nehme zur Kenntnis, dass die ID korrekt ist, aber ich kann den Rest der Felder in der Struktur nicht erhalten?

Antwort

1

Verwenden Sie tags, um Unmarshal anzugeben, was die Schlüsselnamen für jedes Feld sind.

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

Von Dokumentation von Unmarshal,

Der kleingeschrieben Feldname wird als Schlüssel für jedes exportierte Feld verwendet, aber dieses Verhalten mit dem jeweiligen Feld-Tag geändert werden.

Wenn Sie also eine Struktur verwenden, erwartet der Schlüssel standardmäßig niedrigere Werte der Feldnamen. Wenn der Schlüsselname etwas anderes sein sollte, müssen Feldtags verwendet werden, um den Schlüsselnamen anzugeben.

+1

Danke das funktioniert! – Ivan

Verwandte Themen