zoukankan      html  css  js  c++  java
  • 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: "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 (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": "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 (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)
        }
    }
  • 相关阅读:
    iview采坑记:tooltip组件用到了定位后,内容过长不会自动换行了
    在vue项目中监听键盘事件的方法
    在nodejs项目中使用exceljs读取.xlsx文件
    vue中的provide()和inject() 方法,实现父组件向子子孙孙组件传递数据的方法
    vue 源码详解(一):原型对象和全局 `API`的设计
    promise详解 : 实现promise(附实现代码)
    vue 源码详解(三): 渲染初始化 initRender 、生命周期的调用 callHook 、异常处理机制
    vue 源码详解(二): 组件生命周期初始化、事件系统初始化
    how come this
    闭包的理解
  • 原文地址:https://www.cnblogs.com/dfsxh/p/10207110.html
Copyright © 2011-2022 走看看