mgo簡介
mongodb官方?jīng)]有關(guān)于go的mongodb的驅(qū)動(dòng),因此只能使用第三方驅(qū)動(dòng),mgo就是使用最多的一種。
mgo(音mango)是MongoDB的Go語言驅(qū)動(dòng),它用基于Go語法的簡單API實(shí)現(xiàn)了豐富的特性,并經(jīng)過良好測試。
官網(wǎng):http://labix.org/mgo
文檔:http://godoc.org/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"`
Phone string `bson:"tphone"`
}
const URL = "192.168.1.43:50000"
var (
mgoSession *mgo.Session
dataBase = "mydb"
)
func getSession() *mgo.Session {
if mgoSession == nil {
var err error
mgoSession, err = mgo.Dial(URL)
if err != nil {
panic(err)
}
}
return mgoSession.Clone()
}
func witchCollection(collection string, s func(*mgo.Collection) error) error {
session := getSession()
defer session.Close()
c := session.DB(dataBase).C(collection)
return s(c)
}
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()
}
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
}
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
}
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"
}
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標(biāo)準(zhǔn)形式
結(jié)構(gòu)體聲明
type Person struct {
Id_ bson.ObjectId `bson:"_id"`
Name string `bson:"tname"`
Phone string `bson:"tphone"`
}
注意Person的字段首字母大寫,不然不可見。通過bson:”name”這種方式可以定義MongoDB中集合的字段名,如果不定義,mgo自動(dòng)把struct的字段名首字母小寫作為集合的字段名。如果不需要獲得id_,Id_可以不定義,在插入的時(shí)候會自動(dòng)生成。但是建議是通過程序生成,這樣可以提高mongodb的運(yùn)行效率,也可以在插入完成之后直接返回ObjectId,供其他程序使用
手動(dòng)創(chuàng)建一個(gè)ObjecitId
更多請?jiān)L問 紅象UED