专栏首页西安-晁州golang学习之mgo操作mongodb

golang学习之mgo操作mongodb

mgo是mongodb的golang驱动,测试代码:

// mgotest project main.go
package main

import (
    "fmt"
    "time"

    "gopkg.in/mgo.v2"
    "gopkg.in/mgo.v2/bson"
)

type User struct {
    Id        bson.ObjectId `bson:"_id"`
    Username  string        `bson:"name"`
    Pass      string        `bson:"pass"`
    Regtime   int64         `bson:"regtime"`
    Interests []string      `bson:"interests"`
}

const URL String = "127.0.0.1:27017"

var c *mgo.Collection
var session *mgo.Session

func (user User) ToString() string {
    return fmt.Sprintf("%#v", user)
}

func init() {
    session, _ = mgo.Dial(URL)
    //切换到数据库
    db := session.DB("blog")
    //切换到collection
    c = db.C("mgotest")
}

//新增数据
func add() {
    //    defer session.Close()
    stu1 := new(User)
    stu1.Id = bson.NewObjectId()
    stu1.Username = "stu1_name"
    stu1.Pass = "stu1_pass"
    stu1.Regtime = time.Now().Unix()
    stu1.Interests = []string{"象棋", "游泳", "跑步"}
    err := c.Insert(stu1)
    if err == nil {
        fmt.Println("插入成功")
    } else {
        fmt.Println(err.Error())
        defer panic(err)
    }
}

//查询
func find() {
    //    defer session.Close()
    var users []User
    //    c.Find(nil).All(&users)
    c.Find(bson.M{"name": "stu1_name"}).All(&users)
    for _, value := range users {
        fmt.Println(value.ToString())
    }
    //根据ObjectId进行查询
    idStr := "577fb2d1cde67307e819133d"
    objectId := bson.ObjectIdHex(idStr)
    user := new(User)
    c.Find(bson.M{"_id": objectId}).One(user)
    fmt.Println(user)
}

//根据id进行修改
func update() {
    interests := []string{"象棋", "游泳", "跑步"}
    err := c.Update(bson.M{"_id": bson.ObjectIdHex("577fb2d1cde67307e819133d")}, bson.M{"$set": bson.M{
        "name":      "修改后的name",
        "pass":      "修改后的pass",
        "regtime":   time.Now().Unix(),
        "interests": interests,
    }})
    if err != nil {
        fmt.Println("修改失败")
    } else {
        fmt.Println("修改成功")
    }
}

//删除
func del() {
    err := c.Remove(bson.M{"_id": bson.ObjectIdHex("577fb2d1cde67307e819133d")})
    if err != nil {
        fmt.Println("删除失败" + err.Error())
    } else {
        fmt.Println("删除成功")
    }
}
func main() {
    add()
    find()
    update()
    del()
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 解决vuejs应用在nginx非根目录下部署时访问404的问题

    用户1141560
  • 小程序开发知识点总结

    我承认,最近比较懒了,博客也很久没更新了,太对不住自己了,做了一段时间小程序开发,总结了一些知识点,直接上菜。

    用户1141560
  • golang学习之rpc实例

    rpc(远程过程调用),可以像调用本地程序一样调用远端服务,rpc分为http方式和tcp连接方式,使用http的rpc调用如下: 首先是server端: //...

    用户1141560
  • 安装 Kali Linux 2018.1 及之后的事

    1.下载 Kali Linux 镜像文件 2.下载 Win32 Disk Imager 3.用 Win32 Disk Imager 制作U盘启动盘,傻瓜式操作...

    Theo Tsao
  • 有关LinkedList常用方法的源码解析

    jdk1.7.0_79   上文里解析了有关ArrayList中的几个常用方法的源码——《有关ArrayList常用方法的源码解析》,本文将对LinkedLi...

    用户1148394
  • iox:一款功能强大的端口转发&内网代理工具

    iox是一款功能强大的端口转发&内网代理工具,该工具的功能类似于lcx和ew,但是iox的功能和性能都更加强大。

    FB客服
  • NTT DoCoMo如何削减成本并提高基于ETSI NFV的效率

    NTT DoCoMo在计划提高效率和降低成本之后,准备扩大其NFV实施。此前,该运营商于2016年3月推出了全球首个多厂商ETSI NFV商用系统。

    SDNLAB
  • Google开源html模板库ctemplate的完整使用示例

    ctemplate是Google开源的一个C++版本html模板替换库。有了它,在C++代码中操作html模板是一件非常简单和高效的事。通过本文,即可掌握对它的...

    一见
  • Spring源码剖析3:Spring IOC容器的加载过程

    1.目标:熟练使用spring,并分析其源码,了解其中的思想。这篇主要介绍spring ioc 容器的加载

    Java技术江湖
  • IOC容器初始化过程

    上面提到的过程一般是不包括Bean的依赖注入的实现。在Spring中,Bean的载入和依赖注入是两个独立的过程。依赖注入一般发生在应用第一次通过getBean向...

    凯哥Java

扫码关注云+社区

领取腾讯云代金券