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. 第五章 动画 48:动画-使用transition-group元素实例列表动画

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  2. POJ - 2774 Long Long Message (后缀数组/后缀自动机模板题)

    后缀数组: #include<cstdio> #include<algorithm> #include<cstring> #include<vector> ...

  3. Java GUI :Hello World

    public class Demo01 extends Frame{ public Demo01(){ super("Demo01");//标题 this.setSize(450, ...

  4. 链接数据库模板 DataBaseLinkTool

    一. 1.Dao层 对数据库的底层操作  增删改查 package Dao; import java.sql.Connection; import java.sql.ResultSet; import ...

  5. mysql 8.0.18 mgr 搭建及其切换

    mysql 8.0.18 mgr 搭建及其切换 一.系统安装包 yum -y install make gcc-c++ cmake bison-devel ncurses-devel readline ...

  6. FM算法详解

    https://blog.csdn.net/jediael_lu/article/details/77772565 https://blog.csdn.net/bitcarmanlee/article ...

  7. Python天天学_02_基础二

    Python_day_02 金角大王:http://www.cnblogs.com/alex3714/articles/5717620.html ------Python是一个优雅的大姐姐 学习方式: ...

  8. BZOJ 5084: hashit 后缀自动机(原理题)

    比较考验对后缀自动机构建过程的理解. 之前看题解写的都是树链的并,但是想了想好像可以直接撤销,复杂度是线性的. 自己想出来的,感觉后缀自动机的题应该不太能难倒我~ 注意:一定要手画一下后缀自动机的构建 ...

  9. Link Script 学习

    最后更新 2019-06-27 概述 当使用 C 或者 C++ 编写代码实现某种功能时,需要将源代码进行编译以及链接.链接是将一系列目标文件(.o)以及归档文件(.a)组合起来,重新定位各个文件数据并 ...

  10. Understand RNN with TensorFlow in 7 Steps

    待翻译 https://medium.com/@erikhallstrm/hello-world-rnn-83cd7105b767