摘要:沒有類這一概念,對(duì)于變量的捆綁都是由鍵值對(duì)形式的結(jié)構(gòu)體實(shí)現(xiàn)的。在做記錄的查詢時(shí),需要新建一個(gè)同類型的結(jié)構(gòu)體或結(jié)構(gòu)體數(shù)組,然后執(zhí)行操作,如果參數(shù)為空,則返回全部記錄如果你熟悉的操作,可以看出,這樣的操作與直接在內(nèi)操作幾乎相同。
go沒有類這一概念,對(duì)于變量的捆綁都是由鍵值對(duì)形式的結(jié)構(gòu)體(struct)實(shí)現(xiàn)的。
這對(duì)同樣是以鍵值對(duì)形式存儲(chǔ)的mongodb以及json都非常友好。所以在go中,并不是很依賴建立在mongodb之上的orm,使用比較底層的驅(qū)動(dòng)級(jí)的接口即可方便的進(jìn)行操作。
本篇文章將以商品(goods)為例,簡(jiǎn)單講解如何使用mgo進(jìn)行簡(jiǎn)單的增刪改查操作。
mgomgo (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
在當(dāng)前pkg下新建goods.go文件, 對(duì)mgo提供的接口進(jìn)行一些封裝:
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實(shí)例:
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) }
特別注意: 如果在定義時(shí)將ID的類型定義為 bson.ObjectID,并指定bson標(biāo)簽為_id,mongodb將不會(huì)為它分配新的id。但是這樣的結(jié)構(gòu)在與json做交互時(shí)不是很方便。
在做記錄的查詢時(shí),需要新建一個(gè)同類型的結(jié)構(gòu)體或結(jié)構(gòu)體數(shù)組,然后執(zhí)行Find操作,如果參數(shù)為空,則返回全部記錄:
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內(nèi)操作幾乎相同。
刪除:
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) }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/19226.html
摘要:本節(jié)將學(xué)習(xí)來統(tǒng)一管理和部署微服務(wù),引入第三個(gè)微服務(wù)并進(jìn)行存儲(chǔ)數(shù)據(jù)。到目前為止,要想啟動(dòng)微服務(wù)的容器,均在其中的同時(shí)設(shè)置其環(huán)境變量,服務(wù)多了以后管理起來十分麻煩。 譯文鏈接:wuYin/blog原文鏈接:ewanvalentine.io,翻譯已獲作者 Ewan Valentine 授權(quán)。 本文完整代碼:GitHub 在上節(jié)中,我們使用 go-micro 重新實(shí)現(xiàn)了微服務(wù)并進(jìn)行了 Doc...
摘要:表達(dá)式是無狀態(tài)的,只能用于計(jì)算當(dāng)前聚合管道的文檔,不能處理其它的文檔。可以用來重命名增加或刪除域,也可以用于創(chuàng)建計(jì)算結(jié)果以及嵌套文檔用于過濾數(shù)據(jù),只輸出符合條件的文檔。 1.下載安裝 1.1.首先去官網(wǎng)下載mongodb對(duì)應(yīng)版本安裝https://www.mongodb.com/download-center ?????解壓到目錄 例如:c:/mongo ?????創(chuàng)建文件夾用于m...
摘要:準(zhǔn)備數(shù)據(jù)結(jié)構(gòu)這個(gè)以對(duì)一個(gè)簡(jiǎn)單的通訊錄進(jìn)行插入查詢更新刪除記錄為例,中包含和兩個(gè)字段下載還沒出官方的驅(qū)動(dòng)包,是現(xiàn)在比較流行的第三方包,能找到的相關(guān)資料也比較多。準(zhǔn)備實(shí)現(xiàn)對(duì)的增刪改查操作,先想了下怎么寫測(cè)試案例。查找,通過查找該條記錄。 環(huán)境聲明:go version go1.11MongoDB server version 4.0.3 背景 這是我第一次接觸golang和MongoDB,...
摘要:推薦閱讀資源庫(kù)工具應(yīng)用程序精選列表中文版有哪些鮮為人知,但是很有意思的網(wǎng)站一份攻城獅筆記每天搜集上優(yōu)秀的項(xiàng)目一些有趣的民間故事超好用的谷歌瀏覽器油猴插件合集目錄資源文檔文章圖書會(huì)談教程更多庫(kù)工具管理數(shù)據(jù)部署桌面發(fā)展監(jiān)控應(yīng)用資源文檔介紹文檔教 推薦閱讀 MongoDB 資源、庫(kù)、工具、應(yīng)用程序精選列表中文版 有哪些鮮為人知,但是很有意思的網(wǎng)站? 一份攻城獅筆記 每天搜集 Github ...
摘要:一個(gè)簡(jiǎn)單的用戶管理的已經(jīng)完成,現(xiàn)在我們需要在頁(yè)面上展示,方便用戶管理。創(chuàng)建首頁(yè)頁(yè)面首頁(yè)歡迎頁(yè)面首頁(yè)實(shí)戰(zhàn)課程你想學(xué)點(diǎn)啥上班摸魚下班充電案例上手本課程是一個(gè)系列基礎(chǔ)教程,目標(biāo)是帶領(lǐng)讀者上手實(shí)戰(zhàn),課程以新版本的核心概念作為主線。 一個(gè)簡(jiǎn)單的用戶管理的CRUD已經(jīng)完成,現(xiàn)在我們需要在頁(yè)面上展示,方便用戶管理。盡管現(xiàn)在已經(jīng)流行前后分離開發(fā),但是在一些小公司做的項(xiàng)目并不需要前端開發(fā)人員,頁(yè)面也是后...
閱讀 649·2021-11-25 09:43
閱讀 1668·2021-11-18 10:02
閱讀 1041·2021-10-15 09:39
閱讀 1890·2021-10-12 10:18
閱讀 2122·2021-09-22 15:43
閱讀 773·2021-09-22 15:10
閱讀 2088·2019-08-30 15:53
閱讀 988·2019-08-30 13:00