mgo简介


mongodb官方没有关于go的mongodb的驱动,因此只能使用第三方驱动,mgo就是使用最多的一种。

mgo(音mango)是MongoDB的Go语言驱动,它用基于Go语法的简单API实现了丰富的特性,并经过良好测试。

官网:http://labix.org/mgo

文档:http://godoc.org/gopkg.in/mgo.v2

安装与使用


安装

go get gopkg.in/mgo.v2

go中使用

package main

import (
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
) type Person struct {
Id bson.ObjectId `bson:"_id"`
Name string `bson:"tname"` //bson:"name" 表示mongodb数据库中对应的字段名称
Phone string `bson:"tphone"`
} const URL = "192.168.1.43:50000" //mongodb连接字符串 var (
mgoSession *mgo.Session
dataBase = "mydb"
) /**
* 公共方法,获取session,如果存在则拷贝一份
*/
func getSession() *mgo.Session {
if mgoSession == nil {
var err error
mgoSession, err = mgo.Dial(URL)
if err != nil {
panic(err) //直接终止程序运行
}
}
//最大连接池默认为4096
return mgoSession.Clone()
}
//公共方法,获取collection对象
func witchCollection(collection string, s func(*mgo.Collection) error) error {
session := getSession()
defer session.Close()
c := session.DB(dataBase).C(collection)
return s(c)
} /**
* 添加person对象
*/
func AddPerson(p Person) string {
p.Id = bson.NewObjectId()
query := func(c *mgo.Collection) error {
return c.Insert(p)
}
err := witchCollection("person", query)
if err != nil {
return "false"
}
return p.Id.Hex()
} /**
* 获取一条记录通过objectid
*/
func GetPersonById(id string) *Person {
objid := bson.ObjectIdHex(id)
person := new(Person)
query := func(c *mgo.Collection) error {
return c.FindId(objid).One(&person)
}
witchCollection("person", query)
return person
} //获取所有的person数据
func PagePerson() []Person {
var persons []Person
query := func(c *mgo.Collection) error {
return c.Find(nil).All(&persons)
}
err := witchCollection("person", query)
if err != nil {
return persons
}
return persons
} //更新person数据
func UpdatePerson(query bson.M, change bson.M) string {
exop := func(c *mgo.Collection) error {
return c.Update(query, change)
}
err := witchCollection("person", exop)
if err != nil {
return "true"
}
return "false"
} /**
* 执行查询,此方法可拆分做为公共方法
* [SearchPerson description]
* @param {[type]} collectionName string [description]
* @param {[type]} query bson.M [description]
* @param {[type]} sort bson.M [description]
* @param {[type]} fields bson.M [description]
* @param {[type]} skip int [description]
* @param {[type]} limit int) (results []interface{}, err error [description]
*/
func SearchPerson(collectionName string, query bson.M, sort string, fields bson.M, skip int, limit int) (results []interface{}, err error) {
exop := func(c *mgo.Collection) error {
return c.Find(query).Sort(sort).Select(fields).Skip(skip).Limit(limit).All(&results)
}
err = witchCollection(collectionName, exop)
return
}

解释说明


连接字符串

连接字符串可以使用mongodb标准形式


mongodb://myuser:mypass@localhost:40001,otherhost:40001/mydb

结构体声明

type Person struct {
Id_ bson.ObjectId `bson:"_id"`
Name string `bson:"tname"` //bson:"name" 表示mongodb数据库中对应的字段名称
Phone string `bson:"tphone"`
}

注意Person的字段首字母大写,不然不可见。通过bson:”name”这种方式可以定义MongoDB中集合的字段名,如果不定义,mgo自动把struct的字段名首字母小写作为集合的字段名。如果不需要获得id_,Id_可以不定义,在插入的时候会自动生成。但是建议是通过程序生成,这样可以提高mongodb的运行效率,也可以在插入完成之后直接返回ObjectId,供其他程序使用

手动创建一个ObjecitId

bson.NewObjectId()//创建一个objectid

更多请访问 红象UED

最新文章

  1. js内存泄露的几种情况详细探讨
  2. 【转载】 Java线程面试题 Top 50
  3. NOIp 2014 #2 联合权值 Label:图论 !!!未AC
  4. OceanBase架构浅析(一)
  5. eclipse项目编码问题
  6. Claim-based-security for ASP.NET Web APIs using DotNetOpenAuth
  7. 有关java中static关键的重写问题
  8. 研究系统IO和glib IO的关系
  9. malloc函数的底层实现你是否清楚
  10. C++里容易忽视却不能忽视的
  11. Let's Encrypt与DNS轮循
  12. Python学习--列表和元组
  13. 谷歌浏览器插件-jsonView插件安装与使用
  14. 在vue项目中添加全局提示框
  15. WPF 10天修炼 第五天- 内容控件
  16. jquery-插件iCheck 使用
  17. k8s升级,HA集群1.12.0~HA集群1.13.2
  18. Consul vs. Zookeeper
  19. Ubuntu遇到问题“Could not install packages due to an EnvironmentError: [Errno 13] 权限不够: ”
  20. web基础----->jersey整合jetty开发restful应用(一)

热门文章

  1. BZOJ 1202 [HNOI2005]狡猾的商人(并查集)
  2. bzoj 1783: [Usaco2010 Jan]Taking Turns
  3. java 的环境搭建
  4. 倒置数组 Exercise07_12
  5. 最小生成树之Prim算法--蓝白点思想
  6. 8VC Venture Cup 2016 - Elimination Round D. Jerry's Protest 暴力
  7. #iOS问题记录#WKWebView 闪退异常
  8. 分公司下拉框赋值-从后台传到前端jsp
  9. java中return的作用
  10. java线程总结(4/5)