golang基礎學習-MongoDB使用

來源:互聯網
上載者:User

1.系統內容

  • Golang:go version go1.10.3 darwin/amd64
  • OS:MacOS
  • MongoBD: version: 3.4.4

2.Golang使用MongoDB

使用:gopkg.in/mgo.v2

  擷取包:go get gopkg.in/mgo.v2  引入:import "gopkg.in/mgo.v2"

mgo簡介

3.簡單使用MongoDB

3.1 資料設計

3.1.1 資料庫設計:

資料庫名:mydb_tutorial
集合名: t_student

資料集合:t_student欄位說明

欄位 類型 說明
name string 姓名
age int 年齡
sid string 學號
status int 狀態:1正常,9,刪除

3.1.2結構體設計:

type Student struct {    Name   string  `bson: "name"`    Age    int     `bson: "age"`    Sid    string  `bson: "sid"`    Status int     `bson: "status"`}type Per struct {    Per   []Student}

mgo簡介

func Dial(url string) (*Session, error)官方簡介:Dial establishes a new session to the cluster identified by the given seed server(s).

3.2 插入資料

    mongo, err := mgo.Dial("127.0.0.1") // 建立串連     defer mongo.Close()    if err != nil {        return false    }    client := mongo.DB("mydb_tutorial").C("t_student")  //選擇資料庫和集合    //建立資料    data := Student{        Name:   "seeta",        Age:    18,        Sid:    "s20180907",        Status: 1,    }    //插入資料    cErr := client.Insert(&data)    if cErr != nil {        return false    }    return true

執行該段程式,MongoDB會出現一條記錄:

3.3 尋找資料

在3.2插入資料的基礎上,我們再插入一條資料:
data := Student{        Name:   "seeta1",        Age:    18,        Sid:    "s20180908",        Status: 1,    }

3.3.1 findOne

mongo, err := mgo.Dial("192.168.0.91")    defer mongo.Close()    if err != nil {        return false    }    client := mongo.DB("mydb_tutorial").C("t_student")    user := Student{}//尋找sid為 s20180907    cErr := client.Find(bson.M{"sid": "s20180907"}).One(&user)    if cErr != nil {        return false    }    fmt.Println(user)    return true

執行該段程式,會列印尋找到的結果:

{seeta 17 s20180907 1}

3.3.2 findAll

尋找status為1的資料

mongo, err := mgo.Dial("192.168.0.91")    defer mongo.Close()    if err != nil {        return false    }    client := mongo.DB("mydb_tutorial").C("t_student")    //每次最多輸出15條資料    iter := client.Find(bson.M{"status": 1}).Sort("_id").Skip(1).Limit(15).Iter()    var stu Student    var users Per    for iter.Next(&stu) {        users.Per = append(users.Per, stu)    }    if err := iter.Close(); err != nil {        return false    }    fmt.Println(users)    return true

執行該段程式,會列印尋找到的結果:

{[{seeta1 18 s20180908 1} {seeta 18 s20180907 1}]}

3.4 更新資料

更新資料前:

    mongo, err := mgo.Dial("192.168.0.91")    defer mongo.Close()    if err != nil {        return false    }    client := mongo.DB("mydb_tutorial").C("t_student")    //只更新一條    cErr := client.Update(bson.M{"status": 1}, bson.M{"$set": bson.M{"age": 20}})        if cErr != nil {        return false    }    return true}

執行命令後:


只更新了一條資料的年齡

如果我們想把所有status為1的學生年齡都更新為20.

用client.UpdateAll 替換client.Update 就可以了

3.5 刪除資料

刪除資料:sid為s20180907

    mongo, err := mgo.Dial("192.168.0.91")    defer mongo.Close()    if err != nil {        return false    }    client := mongo.DB("mydb_tutorial").C("t_student")    //只更新一條    cErr := client.Remove(bson.M{"sid": "s20180907"})    if cErr != nil {        return false    }    return true

如果資料庫設計的時候,有兩個sid為s20180907 只會刪除一條記錄。
如果刪除所有:用client.RemoveAll 替換client.Remove

4. 其他

寫了一個gin和mgo結合的資料查詢服務demo,細節可點選連結到github查看

相關文章

聯繫我們

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