国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Golang - Golang對MongoDB數據庫的操作簡單封裝教程

Golang對MongoDB數據庫的操作簡單封裝教程

2020-05-16 15:24CodeMiner Golang

mongodb官方沒有關于go的mongodb的驅動,因此只能使用第三方驅動,mgo就是使用最多的一種。下面這篇文章主要給大家介紹了關于利用Golang對MongoDB數據庫的操作簡單封裝的相關資料,需要的朋友可以參考下

前言

GolangMongoDB的操作簡單封裝

使用MongoDB的Go驅動庫 mgo,對MongoDB的操作做一下簡單封裝

mgo(音mango)是MongoDB的Go語言驅動,它用基于Go語法的簡單API實現了豐富的特性,并經過良好測試。

初始化

操作沒有用戶權限的MongoDB

?
1
2
3
4
5
6
7
8
9
var globalS *mgo.Session
 
func init() {
 s, err := mgo.Dial(dialInfo)
 if err != nil {
 log.Fatalf("Create Session: %s\n", err)
 }
 globalS = s
}

如果MongoDB設置了用戶權限需要使用下面的方法操作

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
func init() {
 dialInfo := &mgo.DialInfo{
 Addrs: []string{dbhost}, //數據庫地址 dbhost: mongodb://user@123456:127.0.0.1:27017
 Timeout: timeout,  // 連接超時時間 timeout: 60 * time.Second
 Source: authdb,  // 設置權限的數據庫 authdb: admin
 Username: authuser,  // 設置的用戶名 authuser: user
 Password: authpass, // 設置的密碼 authpass: 123456
 PoolLimit: poollimit, // 連接池的數量 poollimit: 100
 }
 
 s, err := mgo.DialWithInfo(dialInfo)
 if err != nil {
 log.Fatalf("Create Session: %s\n", err)
 }
 globalS = s
}

連接具體的數據和文檔

每一次操作都copy一份 Session,避免每次創建Session,導致連接數量超過設置的最大值

獲取文檔對象 c := Session.DB(db).C(collection)

?
1
2
3
4
5
6
func connect(db, collection string) (*mgo.Session, *mgo.Collection) {
 ms := globalS.Copy()
 c := ms.DB(db).C(collection)
 ms.SetMode(mgo.Monotonic, true)
 return ms, c
}

插入數據

每次操作之后都要主動關閉 Session defer Session.Close()

db:操作的數據庫

collection:操作的文檔(表)

doc:要插入的數據

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
func Insert(db, collection string, doc interface{}) error {
 ms, c := connect(db, collection)
 defer ms.Close()
 
 return c.Insert(doc)
}
 
// test
data := &Data{
 Id: bson.NewObjectId().Hex(),
 Title: "標題",
 Des: "博客描述信息",
 Content: "博客的內容信息",
 Img: "https://upload-images.jianshu.io/upload_images/8679037-67456031925afca6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/700",
 Date: time.Now(),
}
 
err := db.Insert("Test", "TestModel", data)

查詢數據

db:操作的數據庫

collection:操作的文檔(表)

query:查詢條件

selector:需要過濾的數據(projection)

result:查詢到的結果

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
func FindOne(db, collection string, query, selector, result interface{}) error {
 ms, c := connect(db, collection)
 defer ms.Close()
 
 return c.Find(query).Select(selector).One(result)
}
 
func FindAll(db, collection string, query, selector, result interface{}) error {
 ms, c := connect(db, collection)
 defer ms.Close()
 
 return c.Find(query).Select(selector).All(result)
}
 
//test 查詢title="標題",并且返回結果中去除`_id`字段
var result Data
err = db.FindOne(database, collection, bson.M{"title": "標題"}, bson.M{"_id":0}, &result)

更新數據

db:操作的數據庫

collection:操作的文檔(表)

selector:更新條件

update:更新的操作

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
func Update(db, collection string, selector, update interface{}) error {
 ms, c := connect(db, collection)
 defer ms.Close()
 
 return c.Update(selector, update)
}
 
//更新,如果不存在就插入一個新的數據 `upsert:true`
func Upsert(db, collection string, selector, update interface{}) error {
 ms, c := connect(db, collection)
 defer ms.Close()
 
 _, err := c.Upsert(selector, update)
 return err
}
 
// `multi:true`
func UpdateAll(db, collection string, selector, update interface{}) error {
 ms, c := connect(db, collection)
 defer ms.Close()
 
 _, err := c.UpdateAll(selector, update)
 return err
}
 
//test
err = db.Update(database, collection, bson.M{"_id": "5b3c30639d5e3e24b8786540"}, bson.M{"$set": bson.M{"title": "更新標題"}})

刪除數據

db:操作的數據庫

collection:操作的文檔(表)

selector:刪除條件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
func Remove(db, collection string, selector interface{}) error {
 ms, c := connect(db, collection)
 defer ms.Close()
 
 return c.Remove(selector)
}
 
func RemoveAll(db, collection string, selector interface{}) error {
 ms, c := connect(db, collection)
 defer ms.Close()
 
 _, err := c.RemoveAll(selector)
 return err
}
 
//test
err = db.Remove(database,collection,bson.M{"_id":"5b3c30639d5e3e24b8786540"})

分頁查詢

db:操作的數據庫

collection:操作的文檔(表)

page:當前頁面

limit:每頁的數量值

query:查詢條件

selector:需要過濾的數據(projection)

result:查詢到的結果

?
1
2
3
4
5
6
func FindPage(db, collection string, page, limit int, query, selector, result interface{}) error {
 ms, c := connect(db, collection)
 defer ms.Close()
 
 return c.Find(query).Select(selector).Skip(page * limit).Limit(limit).All(result)
}

其他操作

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
func IsEmpty(db, collection string) bool {
 ms, c := connect(db, collection)
 defer ms.Close()
 count, err := c.Count()
 if err != nil {
 log.Fatal(err)
 }
 return count == 0
}
 
func Count(db, collection string, query interface{}) (int, error) {
 ms, c := connect(db, collection)
 defer ms.Close()
 return c.Find(query).Count()
}

完整的代碼請參考

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:https://www.jianshu.com/p/c2aaebf11725

延伸 · 閱讀

精彩推薦
  • Golanggo日志系統logrus顯示文件和行號的操作

    go日志系統logrus顯示文件和行號的操作

    這篇文章主要介紹了go日志系統logrus顯示文件和行號的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    SmallQinYan12302021-02-02
  • GolangGolang中Bit數組的實現方式

    Golang中Bit數組的實現方式

    這篇文章主要介紹了Golang中Bit數組的實現方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    天易獨尊11682021-06-09
  • Golanggolang如何使用struct的tag屬性的詳細介紹

    golang如何使用struct的tag屬性的詳細介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細介紹,從例子說起,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看...

    Go語言中文網11352020-05-21
  • Golanggolang 通過ssh代理連接mysql的操作

    golang 通過ssh代理連接mysql的操作

    這篇文章主要介紹了golang 通過ssh代理連接mysql的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    a165861639710342021-03-08
  • Golanggolang的httpserver優雅重啟方法詳解

    golang的httpserver優雅重啟方法詳解

    這篇文章主要給大家介紹了關于golang的httpserver優雅重啟的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    helight2992020-05-14
  • Golanggo語言制作端口掃描器

    go語言制作端口掃描器

    本文給大家分享的是使用go語言編寫的TCP端口掃描器,可以選擇IP范圍,掃描的端口,以及多線程,有需要的小伙伴可以參考下。 ...

    腳本之家3642020-04-25
  • Golanggolang json.Marshal 特殊html字符被轉義的解決方法

    golang json.Marshal 特殊html字符被轉義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉義的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    李浩的life12792020-05-27
  • GolangGolang通脈之數據類型詳情

    Golang通脈之數據類型詳情

    這篇文章主要介紹了Golang通脈之數據類型,在編程語言中標識符就是定義的具有某種意義的詞,比如變量名、常量名、函數名等等,Go語言中標識符允許由...

    4272021-11-24
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 一区二区日韩 | 欧美在线一区二区 | 久久久久av | 国产成人在线视频 | 99视频在线 | 国产黄色小视频 | 久久久精品综合 | 99久久婷婷国产综合精品电影 | 中文字幕一区三级久久日本 | 一大道一二三区不卡 | 日韩成人在线看 | 高清一区二区三区 | 在线国产一区二区 | 国产一级一级毛片女人精品 | 亚洲视频精品一区 | 龙珠z国语291集普通话 | 亚洲成人伦理 | 久草中文在线 | 日本国产在线 | 精品日韩一区二区三区 | 中文字幕在线看 | 欧美一区二区三区 | 日韩av免费播放 | 国产精品一区二区三区在线播放 | 日日夜夜一区二区 | 国产精品美女视频 | 久久综合成人精品亚洲另类欧美 | 国产精品久久久久久久久久免费 | 亚洲国产精品成人va在线观看 | 欧美一区不卡 | 国产一区视频在线 | 亚洲国产精品自拍 | 懂色一区二区三区av片 | 色九九| 在线国产一区二区 | 在线免费色视频 | 91久久精品一区二区二区 | 欧美日韩电影一区二区 | 国产一区免费视频 | 国产一区二区三区在线观看免费 | 看日韩毛片 |