下面是我的模块代码

你可以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)
    }
}

转载于:https://www.cnblogs.com/iTaoqi/p/11022153.html

golang使用mongoDB - mgo.v2相关推荐

  1. golang常用库之-mgo.v2包、MongoDB官方go-mongo-driver包、七牛Qmgo包 | go操作mongodb、mongodb bson

    文章目录 golang常用库之-mgo.v2包.MongoDB官方go-mongo-driver包.七牛Qmgo包 | go操作mongodb.mongodb bson 一.[不推荐]mgo.v2包 ...

  2. Golang使用mgo.v2包操作MongoDB的基础示例

    golang对MongoDB的操作使用gopkg.in/mgo.v2库操作.如下是基本的一些用法 连接 package main import ( "log" "time ...

  3. Go实战--golang中使用echo框架、MongoDB、JWT搭建REST API(labstack/echo、gopkg.in/mgo.v2、dgrijalva/jwt-go)

    生命不止,继续go go go !!! 之前介绍过golang中restful api的博客,是使用redis作为持久化,httprouter作为框架: Go实战–通过httprouter和redis ...

  4. mgo.v2无法连接MongoDB 5.0.x

    mgo.v2无法连接MongoDB 5.0.x 问题描述: MongoDB升级到5.0.1之后,使用gopkg.in/mgo.v2来连接MongoDB数据库时,发现验证时出现验证错误了.server ...

  5. golang操作mongodb的驱动mongo-go-driver的事务支持和访问控制(mongodb4.0)

    关注公众号 风色年代(itfantasycc) 300G微服务资料等你拿! 作者: sdghchj 本文链接:golang操作mongodb的驱动mongo-go-driver的事务支持和访问控制_s ...

  6. golang读取mongodb数据出错:invalid character ‘Ì‘ looking for beginning of value

    今天操作golang读取mongodb数据出错:invalid character 'Ì' looking for beginning of value,一头雾水,于是把条件放入mongo的控制平台执 ...

  7. golang的mongodb操作(mgo)

    2019独角兽企业重金招聘Python工程师标准>>> 使用mgo http://godoc.org/labix.org/v2/mgo package mainimport (&qu ...

  8. Go实战--golang中使用MongoDB(mgo)

    生命不止,继续 go go go !!! 昨天分享了golang如何操作redis数据库,那今天就介绍一下golang中如何使用mongodb数据库. 何为MongoDB? 简介 MongoDB 是由 ...

  9. golang 操作 mongodb 时vscode提示 primitive.E composite literal uses unkeyed fields 的解决办法

    cannot use "category_title" (untyped string constant) as primitive.E value in array or sli ...

最新文章

  1. JAVA Static方法与单例模式的理解
  2. D - Mike and strings
  3. 玩转iOS开发:《iOS设计模式 — 单例模式》
  4. iphone同步助手_教你如何用爱思助手给你的苹果手机设置自己喜欢的铃声
  5. Windows API入门系列之六 -自己实现MessageBox
  6. 【Java学习笔记九】多线程
  7. 通过Xshell登录远程服务器实时查看log日志
  8. 海德堡大学 BMCV 组(Master/Diploma/Bachelor)研究机会,生物医学图像分析方向
  9. SpringBoot整合ElasticSearch实现多版本的兼容
  10. SVN:show log问题
  11. 最全的TCP面试知识点
  12. 利用双向注意流进行机器理解
  13. 【ISWC2021】当知识图谱遇上零样本视觉问答
  14. 微信公众号采坑之授权config
  15. WampServer的下载方法-解决报错the installation folder chosen is not that wampserver
  16. 极速办公(word)如何文字居中
  17. bzoj 3162: 独钓寒江雪 树形dphash
  18. 各大网站的主题色RGB值,做icon专用
  19. autoit 中文文档:
  20. Verilog:【4】脉冲发生器(pulse_gen.sv)

热门文章

  1. Java设计模式大全
  2. 论文发表投稿流程的说明
  3. LabVIEW控制Arduino实现RGB调色灯(基础篇—6)
  4. Neo4j导入本地CSV文件三元组关系生成图谱
  5. 【Kubernetes 企业项目实战】03、基于 Alertmanager 发送报警到多个接收方(下)
  6. Tsi721芯片驱动代码使用说明
  7. 29_ElasticSearchIK中文分词器的安装和使用
  8. 数据中心的功率密度将会得到进一步提高
  9. golang 时间missing Location in call to Date
  10. 从数据库中查询列表倒序排列(按照时间顺序)