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 ...
随机推荐
- Centos修改IP的两种方式
nmtui命令调出修改窗口:nmtui 重启网卡:/etc/init.d/network restart 或者:service network restart 方式二: 进入网络配置文件目录 首 ...
- C++之++操作符重载
++ 运算符,还可分为前缀 ++ 和后缀 ++ 运算符. 重载前缀++运算符 C++ 允许重载前缀运算符,以使表达式 ++b 能递增 b 的长度值,并返回结果对象.该运算符可以作为成员函数来重载,这使 ...
- linux的逻辑运算符
1:expression :用于计算括号中的组合表达式,如果整个表达式的计算按结果为真,则测试结果也为真. 2:!exp:客队表达式进行逻辑非运算,即对测试结果求反 3:符合 -a 或者 && ...
- MongoDB学习笔记之文档
#向集合中插入文档有两种方式(insert.save) db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库' ...
- C# 跨窗体事件
跨窗体事件:例如从一个窗体改变另一个窗体button的颜色,首先需要将需要改变button的属性改为public using System; using System.Drawing; using S ...
- ng-class的几种用法
参考来自 https://www.cnblogs.com/zhoulin1234/p/9587955.html 方法1.逻辑在后面的中括号里面 ng-class="{true : 'chec ...
- k8s-in-aciton-3
镜像构建过程 构建过程不是由Docker客户端进行的,而是将整个目录的文件上传到Docker守护进程并在那里进行的.Docker客户端和守护进程不要求在同一 台机器上.如果你在一台非Linux操作系统 ...
- RESTful规范与django编写restful接口
一.什么是RESTful规范 ①REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” ②REST从资 ...
- AtCoder AGC022C Remainder Game (图论)
题目链接 https://atcoder.jp/contests/agc022/tasks/agc022_c 题解 大水题一道 就他给的这个代价,猜都能猜到每个数只能用一次 仔细想想,我们肯定是按顺序 ...
- JavaWeb_初识监听器Listener
监听器(listener):对项目起到监听的作用,它能感知到包括request(请求域),session(会话域)和applicaiton(应用程序)的初始化和属性的变化 监听器是Servlet规范中 ...