как получить различные значения в mongodb с помощью golang

Я попытался получить документ из моей коллекции с уникальным идентификатором.

У меня есть коллекция с полями: имя, возраст, город и звание. Я хочу получить "городские" результаты от mongodb с помощью golang.

Мой структурный код

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

С помощью следующего кода для получения результатов от mongodb:

var result []exp //my struct type

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

fmt.Println(result)

С помощью этого кода я получаю в результате пустой массив. Как мне получить все города?


person manigandand    schedule 31.10.2014    source источник


Ответы (2)


Попробуйте этот код

 var result []string 

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

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

 fmt.Println(result)
person sanu    schedule 31.10.2014

Из-за ограничений на отражение mgo (а также encoding/json и другие подобные пакеты) не может использовать неэкспортированные поля для маршалинга или демаршалинга данных. Что вам нужно сделать, так это экспортировать свои поля, сделав первую букву заглавной:

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

Примечание: вам не нужно указывать теги bson, если желаемое имя совпадает с именем поля в нижнем регистре. В документации для bson говорится:

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

Изменить:

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

person ANisus    schedule 31.10.2014