golang中使用mongodb的操作類以及如何封裝

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

mgo簡介

mongodb官方沒有關於go的mongodb的驅動,因此只能使用第三方驅動,mgo就是使用最多的一種。
mgo(音mango)是MongoDB的Go語言驅動,它用基於Go文法的簡單API實現了豐富的特性,並經過良好測試。

官網:http://labix.org/mgo

文檔:http://godoc.org/gopkg.in/mgo.v2

安裝與使用

安裝

go get gopkg.in/mgo.v2

go中使用

package mainimport ("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.SessiondataBase   = "mydb")/** * 公用方法,擷取session,如果存在則拷貝一份 */func getSession() *mgo.Session {if mgoSession == nil {var err errormgoSession, err = mgo.Dial(URL)if err != nil {panic(err) //直接終止程式運行}}//最大串連池預設為4096return 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 []Personquery := 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標準形式

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,供其他程式使用

手動建立一個ObjecitId

bson.NewObjectId()//建立一個objectid

更多請訪問 紅象UED

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.