golang基礎學習-MongoDB使用

1.系統環境

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

2.Golang使用MongoDB

使用:gopkg.in/mgo.v2git

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

mgo簡介github

3.簡單使用MongoDB

3.1 數據設計

3.1.1 數據庫設計:

數據庫名:mydb_tutorial
集合名: t_student數據庫

數據集合:t_student字段說明session

字段 類型 說明
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會出現一條記錄:app

clipboard.png

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的數據ide

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

執行該段程序,會打印查找到的結果:url

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

3.4 更新數據

更新數據前:
clipboard.pngspa

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
}

執行命令後:設計

clipboard.png
只更新了一條數據的年齡

若是咱們想把全部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查看

相關文章
相關標籤/搜索