Go與MongoDB

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

go沒有類這一概念,對於變數的捆綁都是由索引值對形式的結構體(struct)實現的。
這對同樣是以索引值對形式儲存的mongodb以及json都非常友好。所以在go中,並不是很依賴建立在mongodb之上的orm,使用比較底層的驅動級的介面即可方便的進行操作。

本篇文章將以商品(goods)為例,簡單講解如何使用mgo進行簡單的增刪改查操作。

mgo

mgo (pronounced as mango) is a MongoDB driver for the Go language that implements a rich and well tested selection of features under a very simple API following standard Go idioms.

開啟終端輸入

go get gopkg.in/mgo.v2

在當前pkg下建立goods.go檔案, 對mgo提供的介面進行一些封裝:

func connect(cName string) (*mgo.Session, *mgo.Collection) {    session, err := mgo.Dial("$mongoHost") //Mongodb's connection    if err != nil {        panic(err)    }    session.SetMode(mgo.Monotonic, true)    //return a instantiated collect    return session, session.DB(mongoDB).C(cName)}

定義goods執行個體:

type Goods struct {    ID    string     Name  string     Price string     Url   string}

接下來我們要存入第一條記錄:

func (a *Goods) save() error {    s, c := connect("goods")    defer s.Close()    a.ID = bson.NewObjectId().Hex()    return c.Insert(&a)}

特別注意: 如果在定義時將ID的類型定義為 bson.ObjectID,並指定bson標籤為_id,mongodb將不會為它分配新的id。但是這樣的結構在與json做互動時不是很方便。

在做記錄的查詢時,需要建立一個同類型的結構體或結構體數組,然後執行Find操作,如果參數為空白,則返回全部記錄:

func (a Goods) all() ([]Goods, error) {    s, c := connect("goods")    defer s.Close()    var group []Goods    err := c.Find(nil).All(&group)    return group, err}
func (a *Goods) get(id string) error {    s, c := connect("goods")    defer s.Close()    return c.Find(bson.M{"id": id}).One(&a)}

如果你熟悉mongodb的操作,可以看出,這樣的操作與直接在shell內操作幾乎相同。

刪除:

func (a Goods) delete() error {    s, c := connect("goods")    defer s.Close()    return c.Remove(bson.M{"id": a.ID})}

更新:

func (a *Goods) update() error {    s, c := connect("goods")    defer s.Close()    c.Update(bson.M{"id": a.ID}, a)    return a.get(a.ID)}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.