## 操作MongoDB mgo包可以很好地满足我们对MongoDB的日常操作需要。本节将以与Redis和MySQL类似的方式创建连接,存储和检索对象。 ### 实践 1. 获取第三方库: ``` go get gopkg.in/mgo.v2 ``` 2. 建立 config.go: ``` package mongodb import mgo "gopkg.in/mgo.v2" func Setup() (*mgo.Session, error) { session, err := mgo.Dial("localhost") if err != nil { return nil, err } return session, nil } ``` 3. 建立 exec.go: ``` package mongodb import ( "fmt" "gopkg.in/mgo.v2/bson" ) type State struct { Name string `bson:"name"` Population int `bson:"pop"` } // Exec 演示创建和查询 func Exec() error { db, err := Setup() if err != nil { return err } conn := db.DB("gocookbook").C("example") // 我们可以一次性插入多条 if err := conn.Insert(&State{"Washington", 7062000}, &State{"Oregon", 3970000}); err != nil { return err } var s State if err := conn.Find(bson.M{"name": "Washington"}).One(&s); err != nil { return err } if err := conn.DropCollection(); err != nil { return err } fmt.Printf("State: %#v\n", s) return nil } ``` 4. 建立 main.go: ``` package main import "github.com/agtorre/go-cookbook/chapter5/redis" func main() { if err := redis.Exec(); err != nil { panic(err) } if err := redis.Sort(); err != nil { panic(err) } } ``` 5. 这会输出: ``` State: mongodb.State{Name:"Washington", Population:7062000} ``` ### 说明 mgo包还提供连接池,以及调整和配置与mongodb数据库连接的许多方法。本节的例子非常基础,但说明了操作基于文档的数据库是多么容易。该软件包实现了BSON数据类型,与常见的JSON非常相似。 * * * * 学识浅薄,错误在所难免。欢迎在群中就本书提出修改意见,以飨后来者,长风拜谢。 Golang中国(211938256) beego实战(258969317) Go实践(386056972)