1. 程式人生 > 程式設計 >使用go在mangodb中進行CRUD操作

使用go在mangodb中進行CRUD操作

我在學習go語言之前,在對資料庫進行CRUD的操作基本是用java和sql來對mysql資料庫進行操作,但是到了實習中公司業務都是用的是mangodb,通過一段學習時間後,我有了一些收穫。

簡述關係型資料庫,非關係型資料庫

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

非關係型資料庫

非關係型資料庫:指非關係型的,分散式的,且一般不保證遵循 ACID 原則的資料儲存系統。

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

其實可以粗暴的理解成一個關係型資料庫基本靠使用sql語句來操作,而非關係型資料靠key-value來進行操作

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

MangoDB

好了,上面簡述了一下關係型和非關係型資料庫,下面來說一下今天文章的主角。

mangodb

MongoDB 將資料儲存為一個文件,資料結構由鍵值(key=>value)對組成。MongoDB 文件類似於 JSON 物件。欄位值可以包含其他文件,陣列及文件陣列。

所以mangodb操作也是通過json(bson)格式來操作


那麼go語言中是如何來操作mangodb

(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: "[email protected]",Sex: "man",}
 stu2 := Student{
  Name: "zhangdao",Phone: "8765432",Email: "[email protected]",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": "[email protected]"},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)
 }
}

總結

以上所述是小編給大家介紹的使用go在mangodb中進行CRUD操作,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們網站的支援!
如果你覺得本文對你有幫助,歡迎轉載,煩請註明出處,謝謝!