golang使用mongoDB - mgo.v2

下面是個人模塊代碼
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)     } }
相關文章
相關標籤/搜索