下面是個人模塊代碼
git
你能夠go get github.com/yihubaikai/gopublic/mongogithub
裏面下載
mongodb
package mongo數據庫
import ( "fmt" "github.com/yihubaikai/gopublic" "gopkg.in/mgo.v2" "gopkg.in/mgo.v2/bson" //"log" ) //單條數據節點 type DataNode struct { Nick string `json:"nick"` Class string `json:"class"` Flag int `json:"flag"` Starttime string `json:"starttime"` } type Person struct { NAME string PHONE string } type Men struct { Persons []Person } var session *mgo.Session var database *mgo.Database = nil // get mongodb //db: data //host: 127.0.0.1 // func GetDB() *mgo.Database { if database == nil { session, err := mgo.Dial("127.0.0.1:27017") if err != nil { panic(err) } //defer session.close() session.SetMode(mgo.Monotonic, true) database = session.DB("data") return database } else { return database } /* var err error dialInfo := &mgo.DialInfo{ Addrs: []string{config.Hosts}, Direct: false, Timeout: time.Second * 1, PoolLimit: 4096, // Session.SetPoolLimit } //建立一個維護套接字池的session session, err = mgo.DialWithInfo(dialInfo) if err != nil { log.Println(err.Error()) } session.SetMode(mgo.Monotonic, true) //使用指定數據庫 database = session.DB(config.Database) */ } //插入記錄 func Insert(db *mgo.Database, item, nick, class string) bool { c := db.C(item) //defer c.Close() //result := DataNode{} err, _ := c.Upsert(bson.M{"nick": nick}, &DataNode{Nick: nick, Class: class, Flag: 0, Starttime: hPub.Gettime()}) if err != nil { fmt.Println("添加記錄成功:", item, nick, class, hPub.Gettime()) return true } else { fmt.Println("更新記錄成功:", item, nick, class, hPub.Gettime()) return true } //fmt.Println(rs) return true } //獲取記錄 func GetOne(db *mgo.Database, item string, find, update int) (nick, class string) { nick = "" class = "" c := db.C(item) result := DataNode{} err := c.Find(bson.M{"flag": find}).One(&result) if err == nil { fmt.Println("nick", result.Nick, "class", result.Class) nick = result.Nick class = result.Class //獲取記錄了以後更新一下記錄 //err = c.Update(bson.M{"nick": nick}, bson.M{"$set": bson.M{"flag": 2, "starttime": hPub.Gettime()}}) changeInfo, err := c.UpdateAll(bson.M{"nick": nick}, bson.M{"$set": bson.M{"flag": update}}) if err == nil { fmt.Println("獲取記錄:更新記錄成功:", changeInfo) } else { fmt.Println("獲取記錄:更新記錄失敗:", changeInfo) } } else { fmt.Println("獲取記錄失敗") } return nick, class } //-------------------------------------------------------------------- //插入單條數據 func Insert2(db *mgo.Database) { //db := GetDB() c := db.C("user") type User struct { Name string "bson:`name`" Age int "bson:`age`" } err := c.Insert(&User{Name: "Tom", Age: 20}) if err != nil { panic(err) } fmt.Println(err) } func Insert3(db *mgo.Database, item, nick, class string) bool { c := db.C(item) result := DataNode{} err := c.Find(bson.M{"nick": nick}).One(&result) if err != nil { //err := c.Upsert(&DataNode{Nick: nick, Class: class, Flag: 0, Starttime: hPub.Gettime()}) err, _ := c.Upsert(bson.M{"nick": nick}, &DataNode{Nick: nick, Class: class, Flag: 0, Starttime: hPub.Gettime()}) if err != nil { fmt.Println("添加記錄成功:", item, nick, class, hPub.Gettime()) return true } else { fmt.Println("更新記錄成功:", item, nick, class, hPub.Gettime()) return true } } else { fmt.Println("可能存在") return true } } //一次插入多條記錄 func insertMuti() { db := GetDB() c := db.C("user") type User struct { Name string "bson:`name`" Age int "bson:`age`" } err := c.Insert(&User{Name: "Tom", Age: 20}, &User{Name: "Anny", Age: 28}) if err != nil { panic(err) } fmt.Println(err) } //插入數組格式數據 func insertArray() { db := GetDB() c := db.C("user") type User struct { Name string "bson:`name`" Age int "bson:`age`" Groups []string "bson:`groups`" } err := c.Insert(&User{ Name: "Tom", Age: 20, Groups: []string{"news", "sports"}, }) if err != nil { panic(err) } fmt.Println(err) } //插入嵌套數據 func insertNesting() { db := GetDB() c := db.C("user") type Toy struct { Name string "bson:`name`" } type User struct { Name string "bson:`name`" Age int "bson:`age`" Toys []Toy } err := c.Insert(&User{ Name: "Tom", Age: 20, Toys: []Toy{{Name: "dog"}}, }) if err != nil { panic(err) } fmt.Println(err) } //插入map格式的數據 func insertMap() { db := GetDB() c := db.C("user") user := map[string]interface{}{ "name": "Tom", "age": 20, "groups": []string{"news", "sports"}, "toys": []map[string]interface{}{ { "name": "dog", }, }, } err := c.Insert(&user) if err != nil { panic(err) } fmt.Println(err) } //插入關聯其它集合ObjectId的數據 //要使用bson.ObjectIdHex函數對字符串進行轉化,bson.ObjectIdHex函數原型 func insertObjectId() { db := GetDB() c := db.C("user") user := map[string]interface{}{ "name": "Tom", "age": 20, "group_id": bson.ObjectIdHex("540046baae59489413bd7759"), } err := c.Insert(&user) if err != nil { panic(err) } fmt.Println(err) } func QueryOne() { db := GetDB() c := db.C("user") //*****查詢單條數據******* result := Person{} err := c.Find(bson.M{"NAME": "456"}).One(&result) if err != nil { panic(err) } fmt.Println("Phone:", result.NAME, result.PHONE) } func QueryMutil() { db := GetDB() c := db.C("user") //*****查詢多條數據******* result := Person{} var personAll Men //存放結果 iter := c.Find(nil).Iter() for iter.Next(&result) { fmt.Printf("Result: %v\n", result.NAME) personAll.Persons = append(personAll.Persons, result) } }