golang基础学习-MongoDB使用
1.系统环境
- Golang:go version go1.10.3 darwin/amd64
- OS:MacOS
- MongoDB: version: 3.4.4
2.Golang使用MongoDB
使用:gopkg.in/mgo.v2
获取包:go get gopkg.in/mgo.v2
引入:import "gopkg.in/mgo.v2"
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会出现一条记录:

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 更新数据
更新数据前:

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
}
执行命令后:

只更新了一条数据的年龄
如果我们想把所有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查看
golang基础学习-MongoDB使用的更多相关文章
- golang基础学习及web框架
golang的web框架 web框架百花齐放:对比 Go Web 编程 Go Web Examples Golang 适合做 Web 开发吗? beego beego简介 go-restful gol ...
- golang基础学习---log
package main import ( "log" ) func init() { log.SetPrefix("TRACE: ") log.SetFlag ...
- golang基础学习
一.输出hello,world程序 package main; import "fmt"; func main() { fmt.Printf("hello,world&q ...
- Golang基础学习总结
转自:http://blog.csdn.net/yue7603835/article/details/44264925 1.不支持继承.重载 ,比如C++.Java的接口,接口的修改会影响整个实现改接 ...
- Golang 基础学习笔记(2)| 如何安装Go工具
可参考官网:http://docscn.studygolang.com/doc/install#安装 1.OS要求 gc 编译器支持以下操作系统及架构.在开始前,请确保你的系统满足这些需求. 若你的O ...
- golang基础学习-strings包常用函数学习
package main import ( "fmt" "strings" ) //StrFunc 字符串说明 func main() { var testSt ...
- MongoDB实战开发 【零基础学习,附完整Asp.net示例】
MongoDB实战开发 [零基础学习,附完整Asp.net示例] 阅读目录 开始 下载MongoDB,并启动它 在C#使用MongoDB 重构(简化)代码 使用MongoDB的客户端查看数据 使用Mo ...
- Golang 汇编asm语言基础学习
Golang 汇编asm语言基础学习 一.CPU 基础知识 cpu 内部结构 cpu 内部主要是由寄存器.控制器.运算器和时钟四个部分组成. 寄存器:用来暂时存放指令.数据等对象.它是一个更快的内存. ...
- GoLang基础数据类型--->字符串处理大全
GoLang基础数据类型--->字符串处理大全 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 欢迎加入: 高级运维工程师之路 59843264 ...
随机推荐
- python 单元测试_unittest(七)
一.unittest中各阶段的核心概念:TestCase, TestSuite, 断言函数, TextTestRunner,TestFixture TestCase:所用用例的基类,软件测试中基本的测 ...
- HttpServlet容器响应Web客户请求流程?
1)Web客户向Servlet容器发出Http请求: 2)Servlet容器解析Web客户的Http请求: 3)Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息: ...
- WTL自定义控件:需要的头文件
这两天自定义了一个Edit控件,继承自CEdit,如下: class CCheckEditEx : public CWindowImpl< CCheckEditEx, CEdit > 需要 ...
- 2019春Python程序设计练习3(0402--0408)
1-1 如a是一个列表,且a[:]与a[::-1]相等,则a中元素按顺序排列构成一个回文. (2分) T F 1-3 表达式 {1, 3, 2} > {1, 2, 3} 的值为T ...
- Python天天学_05_模块
Python_day_05 金角大王: http://www.cnblogs.com/alex3714/articles/5161349.html ------Python是一个优雅的大姐姐 学习方式 ...
- max函数结合lambda使用
说明:d.keys() 以及列表可以看做lambda函数的实参,max的判断对象是key的值.最终返回的是使得key的值最大的那个实参.
- sklearn可实现的函数或者功能可分为如下几个方面
1.分类算法2.回归算法3.聚类算法4.降维算法5.模型优化6.文本预处理 其中分类算法和回归算法又叫监督学习,聚类算法和降维算法又叫非监督学习 分类算法 1 2 3 4 5 6 7 8 9 10 1 ...
- [2019杭电多校第一场][hdu6582]Path(最短路&&最小割)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6582 题意:删掉边使得1到n的最短路改变,删掉边的代价为该边的边权.求最小代价. 比赛时一片浆糊,赛后 ...
- scala实战学习-快速排序
def qSort(a:List[Int]):List[Int]={ if(a.length < 2) a else qSort(a.filter(a.head > _)) ++ a.fi ...
- 误删系统服务Task Schedule的恢复方法
cmd命令 sc query Schedule查询该服务是否存在 sc delete Schedule删除服务 sc create Schedule binpath= "C:\Windows ...