2014-10-31 17 views
6

Próbowałem pobrać dokument z mojej kolekcji o unikalnym id.jak uzyskać różne wartości w mongodb przy użyciu golang

Mam kolekcję z polami: imię i nazwisko, wiek, miasto i stopień. Chcę uzyskać wyniki "miasta" z mongody używając golang.

Mój kod struct

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

Z poniższego kodu w celu uzyskania wyników z MongoDB:

var result []exp //my struct type 

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

fmt.Println(result) 

Z tym kodem dostaję pustą tablicę jako wynik. Jak zdobędę wszystkie miasta?

Odpowiedz

6

Spróbuj kod

var result []string 

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

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

fmt.Println(result) 
2

Ze względu na ograniczenia w odbiciu, mgo (jak również encoding/json i inne podobne pakiety) nie jest w stanie używać nieodportowanych pól do danych marszałków lub niemiłych. Co trzeba zrobić, aby wyeksportować pola przez pierwszą literę:

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

Na marginesie: nie trzeba określić tagi bson jeśli żądana nazwa jest taka sama, jak nazwa pola małymi literami. W documentation for bson stany:

małe litery nazwa pola jest używany jako klucz dla każdego eksportowanego pola, ale takie zachowanie może być zmienione za pomocą odpowiedniego znacznika pola.

Edit:

Właśnie uświadomiłem sobie, można było dostać się pusty kawałek a nie kawałek z pustych pól struct. Moja odpowiedź nie jest więc faktyczną odpowiedzią na to pytanie, ale nadal jest to kwestia, którą należy wziąć pod uwagę.

Powiązane problemy