使用mgo在golang中如何从mongodb集合中选择所有记录

21
在MongoDB中,执行db.mycollection.find()会返回集合中的所有文档。
在Go语言中使用labix.org/v2/mgo包时,例如执行以下操作:
query := db.C("client").Find();

它抱怨需要以接口形式提供输入。现在,我只需要检索所有文档并遍历它们,然后显示每个文档。我该如何实现这个效果?我看到的所有示例似乎都有过滤器。

2个回答

47

找到了解决方案:

    var results []client

    err := db.C("client").Find(nil).All(&results)
    if err != nil {
        // TODO: Do something about the error
    } else {
        fmt.Println("Results All: ", results) 
    }

16
从数据库中获取到"空值(nil)"并不足以导致程序出现严重错误("panic")。 - bohdan_trotsenko
4
然而,需要让上述代码的用户确实阅读并决定如何处理nil。从某个人直接复制粘贴该代码的角度来看,这是一个让他们至少思考一下的好方法。 - amlwwalker
2
你可以使用 db.c("client").Find(bson.M{}).All(&result) - muthukumar selvaraj

0
func (uc UserController) GetUsersList(w http.ResponseWriter,r *http.Request,p httprouter.Params){

var u []models.User
// Fetch user
if err := uc.session.DB("mydb").C("users").Find(nil).All(&u); err != nil {

    w.WriteHeader(404)
    fmt.Println("Results All: ", u) 
    return
}
uj, _ := json.Marshal(u)

w.Header().Set("Content-Type", "application/json")
w.WriteHeader(200)
fmt.Fprintf(w, "%s", uj)

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接