golang mongoDB 的集合创建以及增删改查操作

mongo官方没有golang 的官方驱动,但是有一个社区驱动:
http://labix.org/mgo
api文档:https://godoc.org/gopkg.in/mgo.v2#Collection.Update
数据的连接操作请看的我的上一篇博客,本文重点介绍mgo的CURD操作及遇到的坑。
mog的文档可以不用特别的创建,在数据插入的时候,如果驱动发现文档不存在,会自动创建。
连接操作

type Operater struct {
    mogSession *mgo.Session
    dbname string
    document string
}
//集合的结构 其他中AGE NAME HEIGHT 名字的首字母必须大写,如果不无法访问到
type person struct {
    AGE    int
    NAME   string
    HEIGHT int
}

//连接数据库
func (operater *Operater) connect() error {
    mogsession, err := mgo.Dial(url)
    if err != nil {
        fmt.Println(err)
        return err
    }
    operater.mogSession=mogsession
    return nil
}

插入操作

//插入
func (operater *Operater) insert( p *person) error {
    collcetion:=operater.mogSession.DB(operater.dbname).C(operater.document)
    err:=collcetion.Insert(p)
    return err
}

使用方式

p:=person{
        33,
        "周杰伦",
        175,
    }
    err=op.insert(&p)
    if err != nil {
        fmt.Println("插入出错",err)
    }

更新操作,调用一次更新操作都是更新一行的。

//更新一行
func (operater *Operater) update() (error) {
    collcetion:=operater.mogSession.DB(operater.dbname).C(operater.document)
    update:=person{
        33,
        "詹姆斯",
        201,
    }
    err:=collcetion.Update(bson.M{"name": "周杰伦"},update)
    if err !=nil {
        fmt.Println(err)
    }
    return err
}

如果想更新所有可以使用UpdateAll() 方法。

查询操作

//统计集合中数据的个数
func (operater *Operater) query() ([]person,error) {
    collcetion:=operater.mogSession.DB(operater.dbname).C(operater.document)
    p:=new(person)
    p.AGE=33
    query:=collcetion.Find(nil)
    ps:=[]person{}
    query.All(&ps)
    iter:=collcetion.Find(nil).Iter()
    //单个查询
    result:=new(person)
    for iter.Next(&result) {
        fmt.Println("一个一个输出:", result)
    }
    return ps,nil
}

查询的参数可以是一个map或一个能够被bson编码的结构体。
该map的key和value可以是一般的interface{},例如bson.M。nil,相当于提供一个空document,如bson.m {}.

查询的结果展示有四个方法:One, For, Iter, or Tail

按照条件查询

func (operater *Operater) query() ([]person,error) {
    collcetion:=operater.mogSession.DB(operater.dbname).C(operater.document)
    p:=new(person)
    p.AGE=33
    query:=collcetion.Find(bson.M{"age":21})
    ps:=[]person{}
    query.All(&ps)
    fmt.Println(ps)
    return ps,nil
}

上述方法会查询age =21 的结果集。
查询条件有一个bson ,什么是bson ??

里面有一个bson 的数据结构,bson 其实就是 Binary Serialized Document Format 二进制文件存储格式,类似于JSON,它和JSON一样,支持内嵌的文档对象和数组对象。
BSON可以做为网络数据交换的一种存储形式,这个有点类似于Google的Protocol Buffer,但是BSON是一种schema-less的存储形式,它的优点是灵活性高,但它的缺点是空间利用率不是很理想,
BSON有三个特点:轻量性、可遍历性、高效性。
MongoDB把BSON做为其数据的存储结构。为啥呢,一个重要的原因是BSON 可遍历。

条件查询带表达式

//条件查询
func (operater *Operater) query() ([]person,error) {
    collcetion:=operater.mogSession.DB(operater.dbname).C(operater.document)
    p:=new(person)
    p.AGE=33
    query:=collcetion.Find(bson.M{"age":bson.M{"$eq":21}})
    ps:=[]person{}
    query.All(&ps)
    fmt.Println(ps)
    return ps,nil
}

其中$eq是 查询的操作符,查询的操作符文档直接参考:
https://docs.mongodb.com/manual/tutorial/query-documents/#read-operations-query-argument

删除操作

//单行删除
func (operater *Operater) delete(seletor interface{}) (error) {
    collcetion:=operater.mogSession.DB(operater.dbname).C(operater.document)
    return collcetion.Remove(seletor)
}
删除方法用法
err=op.delete(&bson.M{"height": 0})
    if err!=nil {
        fmt.Println("删除错误",err)
    }else{
        fmt.Println("删除成功")
    }

数据结构体的定义,其中AGE NAME HEIGHT 名字的首字母必须大写,如果不无法与数据库字段名相对应。

type person struct {
    AGE    int
    NAME   string
    HEIGHT int
}

如果名称不一致的解决方式

type person struct { 
    AGE    int  `bson:"age"`
    NAME   string `bson:"name"`
    HEIGHT int    `bson:"height"`
}

这一点很类似于orm的感觉

所有代码的github:
https://github.com/china-muwenbo/MyTestGo/blob/master/src/com.dylan.main/mongodb/mongoCurd.go
需要的直接下载运行。

BSON 的官方解释:https://www.mongodb.com/json-and-bson

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当使用Golang进行增删改查操作时,通常需要使用数据库驱动程序来连接数据库。下面是一个使用Golang进行增删改查的示例: 首先,你需要导入所需的包: ```go import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) ``` 然后,你需要建立数据库连接: ```go db, err := sql.Open("mysql", "用户名:密码@tcp(localhost:3306)/数据库名") if err != nil { // 处理连接错误 } defer db.Close() ``` 接下来,我们可以进行增加、删除、修改和查询操作。 1. 增加数据: ```go stmt, err := db.Prepare("INSERT INTO 表名 (字段1, 字段2) VALUES (?, ?)") if err != nil { // 处理准备语句错误 } defer stmt.Close() _, err = stmt.Exec(值1, 值2) if err != nil { // 处理执行语句错误 } ``` 2. 删除数据: ```go stmt, err := db.Prepare("DELETE FROM 表名 WHERE 条件") if err != nil { // 处理准备语句错误 } defer stmt.Close() _, err = stmt.Exec(参数) if err != nil { // 处理执行语句错误 } ``` 3. 修改数据: ```go stmt, err := db.Prepare("UPDATE 表名 SET 字段1 = ?, 字段2 = ? WHERE 条件") if err != nil { // 处理准备语句错误 } defer stmt.Close() _, err = stmt.Exec(值1, 值2, 参数) if err != nil { // 处理执行语句错误 } ``` 4. 查询数据: ```go rows, err := db.Query("SELECT 字段1, 字段2 FROM 表名 WHERE 条件", 参数) if err != nil { // 处理查询错误 } defer rows.Close() for rows.Next() { var 字段1 类型1 var 字段2 类型2 err := rows.Scan(&字段1, &字段2) if err != nil { // 处理扫描错误 } // 处理查询结果 fmt.Println(字段1, 字段2) } ``` 这些示例代码可以帮助你开始在Golang中进行增删改查操作。请根据你的具体需求进行相应的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值