分享
  1. 首页
  2. 文章

golang基础学习-MongoDB使用

Mr雨易 · · 13985 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

1.系统环境

  • Golang:go version go1.10.3 darwin/amd64
  • OS:MacOS
  • MongoBD: version: 3.4.4

2.Golang使用MongoDB

使用:gopkg.in/mgo.v2

 获取包:go get gopkg.in/mgo.v2
 引入:import "gopkg.in/mgo.v2"

mgo简介

3.简单使用MongoDB

3.1 数据设计

3.1.1 数据库设计:

数据库名:mydb_tutorial
集合名: t_student

数据集合:t_student字段说明

字段 类型 说明
name string 姓名
age int 年龄
sid string 学号
status int 状态:1正常,9,删除

3.1.2结构体设计:

type Student struct {
 Name string `bson: "name"`
 Age int `bson: "age"`
 Sid string `bson: "sid"`
 Status int `bson: "status"`
}
type Per struct {
 Per []Student
}

mgo简介

func Dial(url string) (*Session, error)
官方简介:Dial establishes a new session to the cluster identified by the given seed server(s).

3.2 插入数据


 mongo, err := mgo.Dial("127.0.0.1") // 建立连接 
 defer mongo.Close()
 if err != nil {
 return false
 }
 client := mongo.DB("mydb_tutorial").C("t_student") //选择数据库和集合
 //创建数据
 data := Student{
 Name: "seeta",
 Age: 18,
 Sid: "s20180907",
 Status: 1,
 }
 //插入数据
 cErr := client.Insert(&data)
 if cErr != nil {
 return false
 }
 return true

执行该段程序,MongoDB会出现一条记录:

465457807-5b9224630c5ac_articlex.png

3.3 查找数据

在3.2插入数据的基础上,我们再插入一条数据:

data := Student{
 Name: "seeta1",
 Age: 18,
 Sid: "s20180908",
 Status: 1,
 }

3.3.1 findOne

mongo, err := mgo.Dial("192.168.0.91")
 defer mongo.Close()
 if err != nil {
 return false
 }
 client := mongo.DB("mydb_tutorial").C("t_student")
 user := Student{}
//查找sid为 s20180907
 cErr := client.Find(bson.M{"sid": "s20180907"}).One(&user)
 if cErr != nil {
 return false
 }
 fmt.Println(user)
 return true

执行该段程序,会打印查找到的结果:

{seeta 17 s20180907 1}

3.3.2 findAll

查找status为1的数据

mongo, err := mgo.Dial("192.168.0.91")
 defer mongo.Close()
 if err != nil {
 return false
 }
 client := mongo.DB("mydb_tutorial").C("t_student")
 //每次最多输出15条数据
 iter := client.Find(bson.M{"status": 1}).Sort("_id").Skip(1).Limit(15).Iter()
 var stu Student
 var users Per
 for iter.Next(&stu) {
 users.Per = append(users.Per, stu)
 }
 if err := iter.Close(); err != nil {
 return false
 }
 fmt.Println(users)
 return true

执行该段程序,会打印查找到的结果:

{[{seeta1 18 s20180908 1} {seeta 18 s20180907 1}]}

3.4 更新数据

更新数据前:


932441320-5b922958e2d74_articlex.png
 mongo, err := mgo.Dial("192.168.0.91")
 defer mongo.Close()
 if err != nil {
 return false
 }
 client := mongo.DB("mydb_tutorial").C("t_student")
 //只更新一条
 cErr := client.Update(bson.M{"status": 1}, bson.M{"$set": bson.M{"age": 20}})
 
 if cErr != nil {
 return false
 }
 return true
}

执行命令后:

1224083132-5b92299e696a6_articlex.png

只更新了一条数据的年龄

如果我们想把所有status为1的学生年龄都更新为20.

用client.UpdateAll 替换client.Update 就可以了

3.5 删除数据

删除数据:sid为s20180907

 mongo, err := mgo.Dial("192.168.0.91")
 defer mongo.Close()
 if err != nil {
 return false
 }
 client := mongo.DB("mydb_tutorial").C("t_student")
 //只更新一条
 cErr := client.Remove(bson.M{"sid": "s20180907"})
 if cErr != nil {
 return false
 }
 return true

如果数据库设计的时候,有两个sid为s20180907 只会删除一条记录。
如果删除所有:用client.RemoveAll 替换client.Remove

4. 其他

写了一个gin和mgo结合的数据查询服务demo,细节可点击链接到github查看


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:Mr雨易

查看原文:golang基础学习-MongoDB使用

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
13985 次点击
1 回复 | 直到 2019年12月17日 17:11:49
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏