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查看