mongodb官方沒有關於go的mongodb的驅動,所以只能使用第三方驅動,mgo就是使用最多的一種。
mgo(音mango)是MongoDB的Go語言驅動,它用基於Go語法的簡單API實現了豐富的特性,並通過良好測試。mongodb
官網:http://labix.org/mgo數據庫
文檔:http://godoc.org/gopkg.in/mgo.v2session
安裝測試
go get gopkg.in/mgo.v2
go中使用.net
package main import ( "gopkg.in/mgo.v2" "gopkg.in/mgo.v2/bson" ) type Person struct { Id bson.ObjectId `bson:"_id"` Name string `bson:"tname"` //bson:"name" 表示mongodb數據庫中對應的字段名稱 Phone string `bson:"tphone"` } const URL = "192.168.1.43:50000" //mongodb鏈接字符串 var ( mgoSession *mgo.Session dataBase = "mydb" ) /** * 公共方法,獲取session,若是存在則拷貝一份 */ func getSession() *mgo.Session { if mgoSession == nil { var err error mgoSession, err = mgo.Dial(URL) if err != nil { panic(err) //直接終止程序運行 } } //最大鏈接池默認爲4096 return mgoSession.Clone() } //公共方法,獲取collection對象 func witchCollection(collection string, s func(*mgo.Collection) error) error { session := getSession() defer session.Close() c := session.DB(dataBase).C(collection) return s(c) } /** * 添加person對象 */ func AddPerson(p Person) string { p.Id = bson.NewObjectId() query := func(c *mgo.Collection) error { return c.Insert(p) } err := witchCollection("person", query) if err != nil { return "false" } return p.Id.Hex() } /** * 獲取一條記錄經過objectid */ func GetPersonById(id string) *Person { objid := bson.ObjectIdHex(id) person := new(Person) query := func(c *mgo.Collection) error { return c.FindId(objid).One(&person) } witchCollection("person", query) return person } //獲取全部的person數據 func PagePerson() []Person { var persons []Person query := func(c *mgo.Collection) error { return c.Find(nil).All(&persons) } err := witchCollection("person", query) if err != nil { return persons } return persons } //更新person數據 func UpdatePerson(query bson.M, change bson.M) string { exop := func(c *mgo.Collection) error { return c.Update(query, change) } err := witchCollection("person", exop) if err != nil { return "true" } return "false" } /** * 執行查詢,此方法可拆分作爲公共方法 * [SearchPerson description] * @param {[type]} collectionName string [description] * @param {[type]} query bson.M [description] * @param {[type]} sort bson.M [description] * @param {[type]} fields bson.M [description] * @param {[type]} skip int [description] * @param {[type]} limit int) (results []interface{}, err error [description] */ func SearchPerson(collectionName string, query bson.M, sort string, fields bson.M, skip int, limit int) (results []interface{}, err error) { exop := func(c *mgo.Collection) error { return c.Find(query).Sort(sort).Select(fields).Skip(skip).Limit(limit).All(&results) } err = witchCollection(collectionName, exop) return }
鏈接字符串可使用mongodb標準形式code
mongodb://myuser:mypass@localhost:40001,otherhost:40001/mydb
type Person struct { Id_ bson.ObjectId `bson:"_id"` Name string `bson:"tname"` //bson:"name" 表示mongodb數據庫中對應的字段名稱 Phone string `bson:"tphone"` }
注意Person的字段首字母大寫,否則不可見。經過bson:」name」這種方式能夠定義MongoDB中集合的字段名,若是不定義,mgo自動把struct的字段名首字母小寫做爲集合的字段名。若是不須要得到id_,Id_能夠不定義,在插入的時候會自動生成。可是建議是經過程序生成,這樣能夠提升mongodb的運行效率,也能夠在插入完成以後直接返回ObjectId,供其餘程序使用對象
手動建立一個ObjecitIdip
bson.NewObjectId()//建立一個objectid
更多請訪問 紅象UEDci