2014-09-18 4 views
0

Вот фрагмент кода, который пытается извлечь все документы из mongodb.Как получить неизвестный документ mongo через mgo

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 
} 

Я получил ошибку: ошибка синтаксиса: неожиданный вар

Что здесь не так? И есть ли лучший способ получить произвольные документы mongo через mgo?

благодаря

ответ

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 
} 

В то время как мы в этом, давайте возвращать ошибку вместо того, чтобы паниковать.

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 
}