我尝试使用唯一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)
使用此代码,我得到一个空数组作为结果。我如何获得所有城市?
答案 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
声明:
小写字段名称用作每个导出字段的键, 但是可以使用相应的字段标记更改此行为。
修改强>
我刚刚意识到你确实得到了一个空切片,而不是一个带有空结构字段的切片。我的答案不是问题的实际答案,但仍然是一个需要考虑的问题。