我在學習go語言之前,在對資料庫進行CRUD的操作基本是用java和sql來對mysql資料庫進行操作,但是到了實習中公司業務都是用的是mongodb,通過一段學習時間後,我有了一些收穫。
簡述關係型資料庫,非關係型資料庫
關係型資料庫:指採用了關係模型來組織資料的資料庫。
關係模型指的就是二維表格模型,而一個關係型資料庫就是由二維表及其之間的聯絡所組成的一個資料組織
非關係型資料庫
非關係型資料庫:指非關係型的,分散式的,且一般不保證遵循ACID
原則的資料儲存系統。
這是比較規範的說法,具體這兩者談不上誰優誰劣,各自有各自的使用場景。
其實可以粗暴的理解成一個關係型資料庫基本靠使用sql語句來操作,而非關係型資料靠key-value來進行操作
(其實按我的理解非關係型資料庫嚴格上不是一種資料庫,應該是一種資料結構化儲存方法的集合,可以是文件或者鍵值對等,但是我不知道這麼說是否正確)
MongoDB
好了,上面簡述了一下關係型和非關係型資料庫,下面來說一下今天文章的主角。
mongodb
MongoDB 將資料儲存為一個文件,資料結構由鍵值(key=>value)對組成。MongoDB 文件類似於 JSON 物件。欄位值可以包含其他文件,陣列及文件陣列。
所以mongodb操作也是通過json(bson)格式來操作
那麼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)
}
}複製程式碼