mgo使用指南
来源:互联网 发布:阿里云服务器ftp 编辑:程序博客网 时间:2024/05/22 11:45
https://godoc.org/labix.org/v2/mgo
mgo使用指南
mgo简介
mgo(音mango)是MongoDB的Go语言驱动,它用基于Go语法的简单API实现了丰富的特性,并经过良好测试。
官方网站:http://labix.org/mgo。
golang.tc(golangtc.com)网站的数据存储就是是用的MongoDB+mgo。近一年使用下来表现良好。
API文档
下面是mgo、mgo/bson、mgo/txn的在线文档。
- mgo GoDoc GoWalker
- mgo/bson GoDoc GoWalker
- mgo/txn GoDoc GoWalker
安装
安装mgo之前请先安装Golang和MongoDB,安装过程不再赘述。
安装bzr版本工具(mgo使用Bazaar作为版本控制系统,因安装的时候需要去Bazaar拉取代码)。
安装命令
示例
下面的代码是个示例。
启动MongoDB,把上面代码复制了跑一下,如果输出下面内容,说明安装成功。
具体代码什么意思先不用管,后面讲解每个方法的用法。
如何使用
下面介绍如何使用mgo,主要介绍集合的操作。对数据库,用户等操作,请自行查看文档。
第一步当然是先导入mgo包
连接服务器
通过方法Dial()来和MongoDB服务器建立连接。Dial()定义如下:
具体使用:
如果是本机,并且MongoDB是默认端口27017启动的话,下面几种方式都可以。
如果不在本机或端口不同,传入相应的地址即可。如:
切换数据库
通过Session.DB()来切换相应的数据库。
如切换到test数据库。
切换集合
通过Database.C()方法切换集合(Collection),这样我们就可以通过对集合进行增删查改操作了。
如切换到`users`集合。
对集合进行操作
介绍插入、查询、修改、删除操作。
先提一下ObjectId,MongoDB每个集合都会一个名为_id的主键,这是一个24位的16进制字符串。对应到mgo中就是bson.ObjectId。
这里我们定义一个struct,用来和集合对应。
注解
注意User的字段首字母大写,不然不可见。通过bson:”name”这种方式可以定义MongoDB中集合的字段名,如果不定义,mgo自动把struct的字段名首字母小写作为集合的字段名。如果不需要获得id_,Id_可以不定义,在插入的时候会自动生成。
插入
插入方法定义如下:
下面代码插入两条集合数据。
这里通过bson.NewObjectId()来创建新的ObjectId,如果创建完需要用到的话,放在一个变量中即可,一般在Web开发中可以作为参数跳转到其他页面。
通过MongoDB客户端可以发现,两条即可已经插入。
查询
通过func (c *Collection) Find(query interface{}) *Query来进行查询,返回的Query struct可以有附加各种条件来进行过滤。
通过Query.All()可以获得所有结果,通过Query.One()可以获得一个结果,注意如果没有数据或者数量超过一个,One()会报错。
条件用bson.M{key: value},注意key必须用MongoDB中的字段名,而不是struct的字段名。
无条件查询
查询所有
上面代码可以把所有Users都查出来:
根据ObjectId查询
结果如下:
更简单的方式是直接用FindId()方法:
注解
注意这里没有处理err。当找不到的时候用One()方法会出错。
单条件查询
多条件查询
修改
通过func (*Collection) Update来进行修改操作。
注意修改单个或多个字段需要通过$set操作符号,否则集合会被替换。
修改字段的值($set)
inc($inc)
字段增加值
push($push)
从数组中增加一个元素
pull($pull)
从数组中删除一个元素
删除
注解
这里也支持多条件,参考多条件查询。
其余示例一:
下面是开发中自己写的一个用mgo连接MongoDB数据库的使用实例。
package mainimport ( "fmt" "labix.org/v2/mgo" "labix.org/v2/mgo/bson")type Person struct { NAME string PHONE string}type Men struct { Persons []Person}const = ( URL = "192.168.2.175:27017")func main() { session, err := mgo.Dial(URL) //连接数据库 if err != nil { panic(err) } defer session.Close() session.SetMode(mgo.Monotonic, true) db := session.DB("mydb") //数据库名称 collection := db.C("person") //如果该集合已经存在的话,则直接返回 //*****集合中元素数目******** countNum, err := collection.Count() if err != nil { panic(err) } fmt.Println("Things objects count: ", countNum) //*******插入元素******* temp := &Person{ PHONE: "18811577546", NAME: "zhangzheHero" } //一次可以插入多个对象 插入两个Person对象 err = collection.Insert(&Person{"Ale", "+55 53 8116 9639"}, temp) if err != nil { panic(err) } //*****查询单条数据******* result := Person{} err = collection.Find(bson.M{"phone": "456"}).One(&result) fmt.Println("Phone:", result.NAME, result.PHONE) //*****查询多条数据******* var personAll Men //存放结果 iter := collection.Find(nil).Iter() for iter.Next(&result) { fmt.Printf("Result: %v\n", result.NAME) personAll.Persons = append(personAll.Persons, result) } //*******更新数据********** err = collection.Update(bson.M{"name": "ccc"}, bson.M{"$set": bson.M{"name": "ddd"}}) err = collection.Update(bson.M{"name": "ddd"}, bson.M{"$set": bson.M{"phone": "12345678"}}) err = collection.Update(bson.M{"name": "aaa"}, bson.M{"phone": "1245", "name": "bbb"}) //******删除数据************ _, err = collection.RemoveAll(bson.M{"name": "Ale”})}
其余示例二:
https://docs.compose.io/languages/golang.html
https://gist.github.com/border/3489566
- mgo使用指南
- mgo使用指南
- mgo使用指南
- mgo使用指南
- mgo使用指南-高级篇(长连接/重连)
- MongoDB的Go语言驱动----mgo的使用指南
- mgo的小技巧
- mgo 聚类统计
- golang mgo 使用
- mgo EnsureIndex注意事项
- mgo中DBRef的使用方法
- golang 使用mgo 连接MongoDB
- go使用mgo连接mongodb
- mgo 驱动新加重连
- go 使用mgo驱动示例
- mgo与session网络资料
- mgo 遇到的问题以及解决方案集合
- Golang MongoDB 驱动 mgo 的若干问题
- Mysql中文乱码问题完美解决方案
- Base64编码解析以及加密、解密实现
- JAVA设计模式之:代理模式--静态代理
- 去空格
- Android 可拖拽的GridView效果实现, 长按可拖拽和item实时交换
- mgo使用指南
- 【解决办法】使用Cocos Code IDE 导出 Android 工程「执行命令出错,返回值:2。」
- 数据库里时间有时分秒,gridcontrol里时间显示却没有时分秒
- android 启动页面的设置
- Andriod(一)--环境搭建
- 后台订单添加weight等栏目
- Tomcat去除项目名称和端口号,直接使用ip地址访问项目的方法
- Cas(03)——Cas Server中各配置文件介绍
- 性能分析与调优的原理