如何通过mgo获取未知的Mongo文档

huangapple go评论71阅读模式
英文:

how to fetch the unknown mongo doc via mgo

问题

这里是试图从 MongoDB 获取所有文档的代码片段。

func fetchAll(db *mgo.Database) map[string]interface{} {
    var msg map[string]interface{}
    err := db.C("msg").Find(nil).All(&msg)
    if err != nil {
        panic(err)
    }
    return msg
}

我得到了错误信息:语法错误:意外的 var。

这里有什么问题?还有没有更好的方法通过 mgo 获取任意的 MongoDB 文档?

谢谢。

英文:

Here is the piece of code that is trying to fetch all the docs from the mongodb.

func fetchAll(db *mgo.Database) map[string]interface {
	var msg map[string]interface{}
	err := db.C("msg").Find(nil).All(&msg)
	if err != nil {
		panic(err)
	}
	return msg
}

I got the error: syntax error: unexpected var

What is wrong here? And is there a better way to fetch the arbitrary mongo docs via mgo?

thanks

答案1

得分: 4

首先,修复语法错误:

func fetchAll(db *mgo.Database) map[string]interface{} {
    var msg map[string]interface{}
    err := db.C("msg").Find(nil).All(&msg)
    if err != nil {
        panic(err)
    }
    return msg
}

注意函数返回类型声明中的 {}

但还有更多问题。All() 将结果集中的所有文档检索到一个切片中。将返回类型更改为切片的映射:

func fetchAll(db *mgo.Database) []map[string]interface{} {
    var msgs []map[string]interface{}
    err := db.C("msg").Find(nil).All(&msgs)
    if err != nil {
        panic(err)
    }
    return msgs
}

顺便说一下,让我们返回错误而不是引发 panic:

func fetchAll(db *mgo.Database) ([]map[string]interface{}, error) {
    var msgs []map[string]interface{}
    err := db.C("msg").Find(nil).All(&msgs)
    return msgs, err
}
英文:

First, fix the syntax error:

func fetchAll(db *mgo.Database) map[string]interface{} {
    var msg map[string]interface{}
    err := db.C("msg").Find(nil).All(&msg)
    if err != nil {
        panic(err)
    }
   return msg
}

Note the {} in the function return type declaration.

But there's more. All() retrieves all documents from the result set to a slice. Change the return type to a slice of maps:

func fetchAll(db *mgo.Database) []map[string]interface{} {
    var msgs []map[string]interface{}
    err := db.C("msg").Find(nil).All(&msgs)
    if err != nil {
        panic(err)
    }
   return msgs
}

While we are at it, let's return the error instead of panicking.

func fetchAll(db *mgo.Database) ([]map[string]interface{}, error) {
    var msgs []map[string]interface{}
    err := db.C("msg").Find(nil).All(&msgs)
    return msgs, err
}

huangapple
  • 本文由 发表于 2014年9月19日 04:38:28
  • 转载请务必保留本文链接:https://go.coder-hub.com/25921906.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定