使用go在mongodb中進行CRUD操做

我在學習go語言以前,在對數據庫進行CRUD的操做基本是用java和sql來對mysql數據庫進行操做,可是到了實習中公司業務都是用的是mongodb,經過一段學習時間後,我有了一些收穫。

簡述關係型數據庫,非關係型數據庫

關係型數據庫:指採用了關係模型來組織數據的數據庫。
關係模型指的就是二維表格模型,而一個關係型數據庫就是由二維表及其之間的聯繫所組成的一個數據組織

java

非關係型數據庫

非關係型數據庫:指非關係型的,分佈式的,且通常不保證遵循ACID原則的數據存儲系統。mysql

這是比較規範的說法,具體這二者談不上誰優誰劣,各自有各自的使用場景。sql

其實能夠粗暴的理解成一個關係型數據庫基本靠使用sql語句來操做,而非關係型數據靠key-value來進行操做mongodb

(其實按個人理解非關係型數據庫嚴格上不是一種數據庫,應該是一種數據結構化存儲方法的集合,能夠是文檔或者鍵值對等,可是我不知道這麼說是否正確)
數據庫

MongoDB

好了,上面簡述了一下關係型和非關係型數據庫,下面來講一下今天文章的主角。json

mongodb數組

MongoDB 將數據存儲爲一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔相似於 JSON 對象。字段值能夠包含其餘文檔,數組及文檔數組。
bash

因此mongodb操做也是經過json(bson)格式來操做session



那麼go語言中是如何來操做mongodb數據結構

(1)數據庫鏈接

數據庫鏈接主要用到了mgo中的Dial()函數,鏈接形式如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)查詢

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)
}複製代碼

這上面用了兩種查詢方法一種是查詢多個,返回多個對象:many

另外一種是查詢單個,返回單個對象: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)
    }
}複製代碼
相關文章
相關標籤/搜索