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"

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查看

golang基础学习-MongoDB使用的更多相关文章

  1. golang基础学习及web框架

    golang的web框架 web框架百花齐放:对比 Go Web 编程 Go Web Examples Golang 适合做 Web 开发吗? beego beego简介 go-restful gol ...

  2. golang基础学习---log

    package main import ( "log" ) func init() { log.SetPrefix("TRACE: ") log.SetFlag ...

  3. golang基础学习

    一.输出hello,world程序 package main; import "fmt"; func main() { fmt.Printf("hello,world&q ...

  4. Golang基础学习总结

    转自:http://blog.csdn.net/yue7603835/article/details/44264925 1.不支持继承.重载 ,比如C++.Java的接口,接口的修改会影响整个实现改接 ...

  5. Golang 基础学习笔记(2)| 如何安装Go工具

    可参考官网:http://docscn.studygolang.com/doc/install#安装 1.OS要求 gc 编译器支持以下操作系统及架构.在开始前,请确保你的系统满足这些需求. 若你的O ...

  6. golang基础学习-strings包常用函数学习

    package main import ( "fmt" "strings" ) //StrFunc 字符串说明 func main() { var testSt ...

  7. MongoDB实战开发 【零基础学习,附完整Asp.net示例】

    MongoDB实战开发 [零基础学习,附完整Asp.net示例] 阅读目录 开始 下载MongoDB,并启动它 在C#使用MongoDB 重构(简化)代码 使用MongoDB的客户端查看数据 使用Mo ...

  8. Golang 汇编asm语言基础学习

    Golang 汇编asm语言基础学习 一.CPU 基础知识 cpu 内部结构 cpu 内部主要是由寄存器.控制器.运算器和时钟四个部分组成. 寄存器:用来暂时存放指令.数据等对象.它是一个更快的内存. ...

  9. GoLang基础数据类型--->字符串处理大全

    GoLang基础数据类型--->字符串处理大全 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 欢迎加入:   高级运维工程师之路               59843264 ...

随机推荐

  1. fastai 核心部件

    1.ImageDataBunch 对数据封装的很好,包括预处理都在这里面完成了 2.models 现有模型及权重 2-1  create_body 可以用来获取现有模型的主体结构 2-2 create ...

  2. JDK8之Stream新特性

    https://www.cnblogs.com/cbxBlog/p/9123106.html /** *JDK8 Stream特性 * Created by chengbx on 2018/5/27. ...

  3. 同一域名对应多个IP时,PHP获取远程网页内容的函数

    同一域名对应多个IP时,PHP获取远程网页内容的函数 [文章作者:张宴 本文版本:v1.0 最后修改:2008.12.15 转载请注明原文链接:http://blog.zyan.cc/post/389 ...

  4. qt类表

  5. C# 常用方法——图片转base64字符串

    其他扩展方法详见:https://www.cnblogs.com/zhuanjiao/p/12060937.html /// <summary> /// Image 转成 base64 / ...

  6. itertools模块、排列、组合、算法

    关于列表重组的python小题 题目一:给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集).             说明:解集不能包含重复的子集. 示例:输入: nums = ...

  7. conda退出base 环境

    安装conda后取消命令行前出现的base,取消每次启动自动激活conda的基础环境   方法一: 每次在命令行通过conda deactivate退出base环境回到系统自动的环境 方法二 1,通过 ...

  8. 论文阅读:Forwarding Metamorphosis: Fast Programmable Match-Action Processing in Hardware for SDN

    摘要: 在软件定义网络中,控制平面在物理上与转发平面分离,控制软件使用开放接口(例如OpenFlow)对转发平面(例如,交换机和路由器)进行编程. 本文旨在克服当前交换芯片和OpenFlow协议的两个 ...

  9. Tire(字典树)

    Tire 字典树,又称为单词查找树,Tire 树,是一种树形结构,它是哈希树的变种. 实现原理: 字典树与字典很相似,当要查一个单词是不是在字典树中,首先看单词的第一个字母是不是在字典的第一层,如果不 ...

  10. Unity3D_(游戏)贪吃蛇

    Unity制作贪吃蛇小游戏 玩家通过“WASD”控制小蛇上下左右移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束 可通 ...