如何使用golang在mongodb中获取不同的值

时间:2014-10-31 09:59:24

标签: mongodb go mgo

我尝试使用唯一ID从我的集合中检索文档。

我有一个字段集合:名称,年龄,城市和等级。我想得到城市' 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)

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

2 个答案:

答案 0 :(得分:7)

试试此代码

 var result []string 

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

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

 fmt.Println(result)

答案 1 :(得分:1)

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

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

附注:如果所需名称与小写字段名称相同,则无需指定bson标记。 documentation for bson 声明:

  

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

修改

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