1. 程式人生 > >Go語言開發中MongoDB資料庫

Go語言開發中MongoDB資料庫

伴隨著移動端的興起,Nosql資料庫以其分散式設計和高效能等特點得到了廣泛的應該用,下面將介紹下Nosql中的mongoDB在Go語言中的應用,在開發前,有必要了解下基礎知識
在開發前,匯入開發需要用到的類庫

import (
"fmt"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
"log"
)

 

在示例中用到的結構有:

type Student struct {
Id_ bson.ObjectId bson:"_id"
Name string bson:"name"
Phone string bson:
"phone" Email string bson:"email" Sex string bson:"sex" }

 

一、資料庫連線

資料庫連線主要用到了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 }

 

二、插入

插入主要用到了函式 func (c *Collection) Insert(docs ...interface{}) error
下面是我插入的兩條記錄

func InsertToMogo() {
    c := ConnecToDB()
    stu1 := Student{
        Name:  "zhangsan",
        Phone: "13480989765",
        Email: "[email protected]
", Sex: "F", } stu2 := Student{ Name: "liss", Phone: "13980989767", Email: "[email protected]", Sex: "M", } err := c.Insert(&stu1, &stu2) if err != nil { log.Fatal(err) } }

 

通過視覺化工具可以看到我插入的資料

{
    "_id" : ObjectId("5a66a96306d2a40a8b884049"),
    "name" : "zhangsan",
    "phone" : "13480989765",
    "email" : "[email protected]",
    "sex" : "F"
}

{
    "_id" : ObjectId("5a66a96306d2a40a8b88404a"),
    "name" : "liss",
    "phone" : "13980989767",
    "email" : "[email protected]",
    "sex" : "M"
}

 

三、查詢

查詢單個主要用到了func (c *Collection) Find(query interface{}) *Query函式,查詢單個和多個主要用到了One()和Many()函式,條件組合可以檢視mongDB資料庫使用。

func GetDataViaSex() {
    c := ConnecToDB()
    result := Student{}
    err := c.Find(bson.M{"sex": "M"}).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)

}

 

查詢所有形如:c.Find(nil).Many(&results)
另外,方法中也有個根據id來查詢的方法 func (c *Collection) FindId(id interface{}) *Query,

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)
}

 

三、更新

更新通過函式

*func (c *Collection) Update(selector interface{}, update interface{}) error
*func (c *Collection) UpdateAll(selector interface{}, update interface{}) (info *ChangeInfo, err error)
*func (c *Collection) UpdateId(id interface{}, update interface{}) error

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

 

四、刪除

刪除對應的方法

func (c *Collection) Remove(selector interface{}) error]
func (c *Collection) RemoveAll(selector interface{}) (info *ChangeInfo, err error)
func (c *Collection) RemoveId(id interface{}) error
func RemoveFromMgo() {
    c := ConnecToDB()
    _, err := c.RemoveAll(bson.M{"phone": "13480989765"})
    if err != nil {
        log.Fatal(err)
    }
}