mongodb官方没有关于go的mongodb的驱动,所以只能使用第三方驱动,mgo就是使用最多的一种。
mgo(音mango)是MongoDB的Go语言驱动,它用基于Go语法的简单API实现了丰富的特性,并通过良好测试。mongodb
官网:http://labix.org/mgo数据库
文档:http://godoc.org/gopkg.in/mgo.v2session
安装测试
go get gopkg.in/mgo.v2
go中使用.net
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标准形式code
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,供其余程序使用对象
手动建立一个ObjecitIdip
bson.NewObjectId()//建立一个objectid
更多请访问 红象UEDci