golang使用mongoDB - mgo.v2


下面是我的模塊代碼

你可以go get github.com/yihubaikai/gopublic/mongo

里面下載

 

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)
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM