使用go在mangodb中进行CRUD操作

 更新时间:2019年10月08日 13:05:33   作者:xjlgxlgx  
这篇文章主要介绍了使用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: "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)
 }
}

总结

以上所述是小编给大家介绍的使用go在mangodb中进行CRUD操作,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

相关文章

  • 详解go中的defer链如何被遍历执行

    详解go中的defer链如何被遍历执行

    为了在退出函数前执行一些资源清理的操作,例如关闭文件、释放连接、释放锁资源等,会在函数里写上多个defer语句,多个_defer 结构体形成一个链表,G 结构体中某个字段指向此链表,那么go中的defer链如何被遍历执行,本文将给大家详细的介绍,感兴趣的朋友可以参考下
    2024-01-01
  • Golang实现事务型内存数据库的方法详解

    Golang实现事务型内存数据库的方法详解

    内存数据库经我们经常用到,例如Redis,那么如何从零实现一个内存数据库呢,本文旨在介绍如何使用Golang编写一个KV内存数据库MossDB
    2023-03-03
  • go语言中使用timer的常用方式

    go语言中使用timer的常用方式

    这篇文章主要介绍了go语言中使用timer的常用方式,实例分析了三种常用的使用timer的方法,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • 浅谈Go Channel 高级实践

    浅谈Go Channel 高级实践

    这篇文章主要介绍了浅谈Go Channel 高级实践,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Go 语言入门之net/url 包

    Go 语言入门之net/url 包

    这篇文章主要介绍了Go 语言入门之net/url 包,文章基于GO语言的相关资料展开 net/url 包的详细内容,具有一定的的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • golang切片扩容规则实现

    golang切片扩容规则实现

    这篇文章主要介绍了golang切片扩容规则实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 基于Go语言实现猜谜游戏

    基于Go语言实现猜谜游戏

    这篇文章主要为大家详细介绍了如何基于Go语言实现猜谜游戏,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习
    2023-09-09
  • Golang在Mac、Linux、Windows下如何交叉编译的实现

    Golang在Mac、Linux、Windows下如何交叉编译的实现

    这篇文章主要介绍了Golang在Mac、Linux、Windows下如何交叉编译的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • GO中高效的将int转换为string的方法与源码

    GO中高效的将int转换为string的方法与源码

    本文将从逐步介绍几种在 Go 中将 int 转换为 string 的常见方法,并重点剖析这几种方法在性能上的特点,另外,还会重点介绍 FormatInt 高效的算法实现,需要的朋友可以参考下
    2024-01-01
  • Go语言中的字符串处理方法示例详解

    Go语言中的字符串处理方法示例详解

    Go语言的字符串是使用UTF-8编码的。UTF-8是Unicode的实现方式之一。这篇文章主要介绍了Go语言中的字符串处理方法,需要的朋友可以参考下
    2018-10-10

最新评论