9

我试图从我的集合中检索具有唯一 ID 的文档。

我有一个包含字段的集合:姓名、年龄、城市和排名。我想使用 golang 从 mongodb 获取“城市”结果。

我的结构代码

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)

使用此代码,我得到一个空数组作为结果。我如何获得所有城市?

4

2 回答 2

8

试试这个代码

 var result []string 

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

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

 fmt.Println(result)
于 2014-10-31T10:12:18.170 回答
1

由于反射的限制,mgo(以及encoding/json其他类似的包)无法使用未导出的字段来编组或解组数据。您需要做的是通过大写第一个字母来导出您的字段:

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

附注:如果所需名称与小写字段名称相同,则无需指定 bson 标记。状态的文档bson

小写的字段名称用作每个导出字段的键,但可以使用相应的字段标记更改此行为。

编辑:

我刚刚意识到你确实得到了一个空切片,而不是一个带有空结构字段的切片。我的回答不是问题的实际答案,但这仍然是您需要考虑的问题。

于 2014-10-31T10:04:06.507 回答