欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用go在mangodb中進(jìn)行CRUD操作

 更新時(shí)間:2019年10月08日 13:05:33   作者:xjlgxlgx  
這篇文章主要介紹了使用go在mangodb中進(jìn)行CRUD操作,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

我在學(xué)習(xí)go語(yǔ)言之前,在對(duì)數(shù)據(jù)庫(kù)進(jìn)行CRUD的操作基本是用java和sql來(lái)對(duì)mysql數(shù)據(jù)庫(kù)進(jìn)行操作,但是到了實(shí)習(xí)中公司業(yè)務(wù)都是用的是mangodb,通過(guò)一段學(xué)習(xí)時(shí)間后,我有了一些收獲。

簡(jiǎn)述關(guān)系型數(shù)據(jù)庫(kù),非關(guān)系型數(shù)據(jù)庫(kù)

關(guān)系型數(shù)據(jù)庫(kù):指采用了關(guān)系模型來(lái)組織數(shù)據(jù)的數(shù)據(jù)庫(kù)。
關(guān)系模型指的就是二維表格模型,而一個(gè)關(guān)系型數(shù)據(jù)庫(kù)就是由二維表及其之間的聯(lián)系所組成的一個(gè)數(shù)據(jù)組織

非關(guān)系型數(shù)據(jù)庫(kù)

非關(guān)系型數(shù)據(jù)庫(kù):指非關(guān)系型的,分布式的,且一般不保證遵循 ACID 原則的數(shù)據(jù)存儲(chǔ)系統(tǒng)。

這是比較規(guī)范的說(shuō)法,具體這兩者談不上誰(shuí)優(yōu)誰(shuí)劣,各自有各自的使用場(chǎng)景。

其實(shí)可以粗暴的理解成一個(gè)關(guān)系型數(shù)據(jù)庫(kù)基本靠使用sql語(yǔ)句來(lái)操作,而非關(guān)系型數(shù)據(jù)靠key-value來(lái)進(jìn)行操作

(其實(shí)按我的理解非關(guān)系型數(shù)據(jù)庫(kù)嚴(yán)格上不是一種數(shù)據(jù)庫(kù),應(yīng)該是一種數(shù)據(jù)結(jié)構(gòu)化存儲(chǔ)方法的集合,可以是文檔或者鍵值對(duì)等,但是我不知道這么說(shuō)是否正確)

MangoDB

好了,上面簡(jiǎn)述了一下關(guān)系型和非關(guān)系型數(shù)據(jù)庫(kù),下面來(lái)說(shuō)一下今天文章的主角。

mangodb

MongoDB 將數(shù)據(jù)存儲(chǔ)為一個(gè)文檔,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對(duì)組成。MongoDB 文檔類(lèi)似于 JSON 對(duì)象。字段值可以包含其他文檔,數(shù)組及文檔數(shù)組。

所以mangodb操作也是通過(guò)json(bson)格式來(lái)操作

 

那么go語(yǔ)言中是如何來(lái)操作mangodb

(1)數(shù)據(jù)庫(kù)連接

數(shù)據(jù)庫(kù)連接主要用到了mgo中的Dial()函數(shù),連接形式如mgo.Dial(url1,url2,url3),具體代碼如下:

func ConnecToDB() *mgo.Collection {
 session, err := mgo.Dial("127.0.0.1:27017")
 if err != nil {
 panic(err)
 }
 //defer session.Close()
 session.SetMode(mgo.Monotonic, true)
 c := session.DB("medex").C("student")
 return c
}

(2)插入

func InsertToMogo() {
 c := ConnecToDB()
 stu1 := Student{
 Name: "xiaoming",
 Phone: "18933333333",
 Email: "12345678@qq.com",
 Sex: "man",
 }
 stu2 := Student{
 Name: "zhangdao",
 Phone: "8765432",
 Email: "133333384@qq.com",
 Sex: "woman",
 }
 err := c.Insert(&stu1, &stu2)
 if err != nil {
 log.Fatal(err)
 }
}

(3)查詢(xún)

func GetDataViaSex() {
 c := ConnecToDB()
 result := Student{}
 err := c.Find(bson.M{"sex": "woman"}).One(&result)
 if err != nil {
 log.Fatal(err)
 }
 fmt.Println("student", result)
 students := make([]Student, 20)
 err = c.Find(nil).All(&students)
 if err != nil {
 log.Fatal(err)
 }
 fmt.Println(students)

}
func GetDataViaId() {
 id := bson.ObjectIdHex("5a66a96306d2a40a8b884049")
 c := ConnecToDB()
 stu := &Student{}
 err := c.FindId(id).One(stu)
 if err != nil {
 log.Fatal(err)
 }
 fmt.Println(stu)
}

這上面用了兩種查詢(xún)方法一種是查詢(xún)多個(gè),返回多個(gè)對(duì)象:many

另一種是查詢(xún)單個(gè),返回單個(gè)對(duì)象:one

(4)更新

func UpdateDBViaId() {
 //id := bson.ObjectIdHex("5a66a96306d2a40a8b884049")
 c := ConnecToDB()
 err := c.Update(bson.M{"email": "12832984@qq.com"}, bson.M{"$set": bson.M{"name": "haha", "phone": "37848"}})
 if err != nil {
 log.Fatal(err)
 }
}

(5)刪除

func RemoveFromMgo() {
 c := ConnecToDB()
 _, err := c.RemoveAll(bson.M{"phone": "13480989765"})
 if err != nil {
 log.Fatal(err)
 }
}

總結(jié)

以上所述是小編給大家介紹的使用go在mangodb中進(jìn)行CRUD操作,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • Golang中的強(qiáng)大Web框架Fiber詳解

    Golang中的強(qiáng)大Web框架Fiber詳解

    在不斷發(fā)展的Web開(kāi)發(fā)領(lǐng)域中,選擇正確的框架可以極大地影響項(xiàng)目的效率和成功,介紹一下Fiber,這是一款令人印象深刻的Golang(Go語(yǔ)言)Web框架,在本文中,我們將深入了解Fiber的世界,探討其獨(dú)特的特性,并理解為什么它在Go生態(tài)系統(tǒng)中引起了如此大的關(guān)注
    2023-10-10
  • 詳解Go中defer與return的執(zhí)行順序

    詳解Go中defer與return的執(zhí)行順序

    Go?defer中改變r(jià)eturn的值會(huì)生效嗎,這就設(shè)計(jì)到了GO語(yǔ)言中defer與return哪個(gè)先執(zhí)行的問(wèn)題了,下面小編就通過(guò)簡(jiǎn)單的示例來(lái)和大家講講吧
    2023-07-07
  • Go?gRPC服務(wù)雙向流式RPC教程

    Go?gRPC服務(wù)雙向流式RPC教程

    這篇文章主要為大家介紹了Go?gRPC服務(wù)雙向流式RPC教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • go實(shí)現(xiàn)冒泡排序算法

    go實(shí)現(xiàn)冒泡排序算法

    冒泡排序算法是數(shù)據(jù)結(jié)構(gòu)中常用的一種算法,本文就介紹了go實(shí)現(xiàn)冒泡排序算法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 使用Go重構(gòu)流式日志網(wǎng)關(guān)的實(shí)戰(zhàn)分享

    使用Go重構(gòu)流式日志網(wǎng)關(guān)的實(shí)戰(zhàn)分享

    流式日志網(wǎng)關(guān)的主要功能是提供?HTTP?接口,接收?CDN?邊緣節(jié)點(diǎn)上報(bào)的各類(lèi)日志(訪(fǎng)問(wèn)日志/報(bào)錯(cuò)日志/計(jì)費(fèi)日志等),將日志作預(yù)處理并分流到多個(gè)的?Kafka?集群和?Topic?中,本文就給大家分享如何使用?Go?重構(gòu)流式日志網(wǎng)關(guān)
    2023-06-06
  • Golang中常用的語(yǔ)法糖分享

    Golang中常用的語(yǔ)法糖分享

    語(yǔ)法糖,也稱(chēng)糖語(yǔ)法,是由英國(guó)計(jì)算機(jī)科學(xué)家彼得·蘭丁提出的,用于表示編程語(yǔ)言中的某種類(lèi)型的語(yǔ)法,這些語(yǔ)法不會(huì)影響功能,但使用起來(lái)卻很方便,本文就來(lái)看看Golang中常用的語(yǔ)法糖有哪些吧
    2023-05-05
  • 再次探討go實(shí)現(xiàn)無(wú)限 buffer 的 channel方法

    再次探討go實(shí)現(xiàn)無(wú)限 buffer 的 channel方法

    我們知道go語(yǔ)言?xún)?nèi)置的channel緩沖大小是有上限的,那么我們自己如何實(shí)現(xiàn)一個(gè)無(wú)限 buffer 的 channel呢?今天通過(guò)本文給大家分享go實(shí)現(xiàn)無(wú)限 buffer 的 channel方法,感興趣的朋友一起看看吧
    2021-06-06
  • Golang內(nèi)存模型教科書(shū)級(jí)講解

    Golang內(nèi)存模型教科書(shū)級(jí)講解

    go官方介紹go內(nèi)存模型的時(shí)候說(shuō):探究在什么條件下,goroutine?在讀取一個(gè)變量的值的時(shí),能夠看到其它?goroutine?對(duì)這個(gè)變量進(jìn)行的寫(xiě)的結(jié)果,Go內(nèi)存模型規(guī)定了一些條件,在這些條件下,在一個(gè)goroutine中讀取變量返回的值能夠確保是另一個(gè)goroutine中對(duì)該變量寫(xiě)入的值
    2023-03-03
  • GO 反射對(duì)性能的影響分析

    GO 反射對(duì)性能的影響分析

    這篇文章主要為大家介紹了GO 反射對(duì)性能的影響分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • golang實(shí)現(xiàn)微信支付v3版本的方法

    golang實(shí)現(xiàn)微信支付v3版本的方法

    這篇文章主要介紹了golang實(shí)現(xiàn)微信支付v3版本的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03

最新評(píng)論