2014-10-31 1 views
6

Ich habe versucht, ein Dokument aus meiner Sammlung mit eindeutiger ID zu erhalten.Wie man verschiedene Werte in Mongodb mit Hilfe von Golang bekommt

Ich habe eine Sammlung mit Feldern: Name, Alter, Stadt und Rang. Ich möchte "Stadt" -Ergebnisse von mongodb mit Golang bekommen.

Mein struct Code

type exp struct { 
    name string `bson:"name"` 
    age int `bson:"age"` 
    city string `bson:"city"` 
    rank int `bson:"rank"` 
} 

Mit dem folgenden Code ergibt sich aus mongodb abzurufen:

var result []exp //my struct type 

err = coll.Find(bson.M{"City":bson.M{}}).Distinct("City",&result) 

fmt.Println(result) 

Mit diesem Code bekomme ich ein leeres Array als Ergebnis. Wie würde ich alle Städte bekommen?

Antwort

6

diesen Code Versuchen

var result []string 

err = c.Find(nil).Distinct("city", &result) 

if err != nil { 
    log.Fatal(err) 
} 

fmt.Println(result) 
2

Aufgrund von Einschränkungen bei der Reflektion können mgo (sowie encoding/json und andere ähnliche Pakete) nicht-exportierte Felder zum Marshalling oder zum Unmarshalen von Daten nicht verwenden. Was Sie tun müssen, ist Ihre Felder von Kapital den ersten Buchstaben exportieren:

type exp struct { 
    Name string `bson:"name"` 
    Age int `bson:"age"` 
    City string `bson:"city"` 
    Rank int `bson:"rank"` 
} 

Eine Randbemerkung: Sie müssen nicht die BSON Tags angeben, ob der gewünschte Name der gleiche wie der Kleinfeldname ist. Die documentation for bson Zustände:

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

Edit:

ich nur realisiert man eine leeren Scheibe und nicht eine Scheibe mit leeren Struktur Felder erhalten haben. Meine Antwort ist dann keine tatsächliche Antwort auf die Frage, aber es ist immer noch ein Problem, das Sie berücksichtigen müssen.

Verwandte Themen