伴随着移动端的兴起, Nosql 数据库以其分布式设计和高性能等特点得到了广泛的应该用, 下面将介绍下 Nosql 中的 MongoDB 在 Go 语言中的应用, 在开发前, 有必要了解下基础知识, 数据库, MongoDB 在 Go 语言开发接口文档 https://godoc.org/gopkg.in/mgo.v2
在开发前, 导入开发需要用到的类库
- 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 (cCollection) Insert(docs ...interface{}) error
下面是我插入的两条记录
- func InsertToMogo() {
- c := ConnecToDB()
- stu1 := Student{
- Name: "zhangsan",
- Phone: "13480989765",
- Email: "329832984@qq.com",
- Sex: "F",
- }
- stu2 := Student{
- Name: "liss",
- Phone: "13980989767",
- Email: "12832984@qq.com",
- Sex: "M",
- }
- err := c.Insert(&stu1, &stu2)
- if err != nil {
- log.Fatal(err)
- }
- }
通过可视化工具可以看到我插入的数据
- {
- "_id" : ObjectId("5a66a96306d2a40a8b884049"),
- "name" : "zhangsan",
- "phone" : "13480989765",
- "email" : "329832984@qq.com",
- "sex" : "F"
- }
- {
- "_id" : ObjectId("5a66a96306d2a40a8b88404a"),
- "name" : "liss",
- "phone" : "13980989767",
- "email" : "12832984@qq.com",
- "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 (cCollection) Update(selector interface{
- }, update interface{
- }) error
- func (cCollection) 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": "12832984@qq.com"
- }, bson.M{
- "$set": bson.M{
- "name": "haha", "phone": "37848"
- }
- })
- if err != nil {
- log.Fatal(err)
- }
- }
四, 删除
删除对应的方法
- func (c Collection) Remove(selector interface{
- }) error]
- func (cCollection) RemoveAll(selector interface{
- }) (info ChangeInfo, err error)
- func (cCollection) RemoveId(id interface{
- }) error
- func RemoveFromMgo() {
- c := ConnecToDB()
- _, err := c.RemoveAll(bson.M{
- "phone": "13480989765"
- })
- if err != nil {
- log.Fatal(err)
- }
- }
写在最后
介绍了一篇 MySQL 和一篇 MongoDB 在在 Go 语言开发中的使用, 主要是为了学习下关系型数据库和 NoSql 数据库在开发中的使用.
转载自: 小歪子 go
链接: https://www.jianshu.com/p/5a1712e6141f
來源: 简书
来源: http://www.bubuko.com/infodetail-2793857.html