伴随着移动端的兴起,Nosql数据库以其分布式设计和高性能等特点得到了广泛的应该用,下面将介绍下Nosql中的mongoDB在Go语言中的应用,在开发前,有必要了解下基础知识
在开发前,导入开发需要用到的类库

import (
"fmt"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
"log"
)

在示例中用到的结构有:

type Student struct {
Id_ bson.ObjectId bson:"_id"
Name string bson:"name"
Phone string bson:"phone"
Email string bson:"email"
Sex string bson:"sex"
}
一、数据库连接

数据库连接主要用到了mgo中的Dial()函数,连接形式如mgo.Dial(url1,url2,url3),具体代码如下:

func ConnecToDB() *mgo.Collection {
session, err := mgo.Dial("127.0.0.1:27017")
if err != nil {
panic(err)
}
//defer session.Close()
session.SetMode(mgo.Monotonic, true)
c := session.DB("medex").C("student")
return c
}
二、插入

插入主要用到了函数 func (c *Collection) Insert(docs ...interface{}) error
下面是我插入的两条记录

func InsertToMogo() {
c := ConnecToDB()
stu1 := Student{
Name: "zhangsan",
Phone: "",
Email: "329832984@qq.com",
Sex: "F",
}
stu2 := Student{
Name: "liss",
Phone: "",
Email: "12832984@qq.com",
Sex: "M",
}
err := c.Insert(&stu1, &stu2)
if err != nil {
log.Fatal(err)
}
}

通过可视化工具可以看到我插入的数据

{
"_id" : ObjectId("5a66a96306d2a40a8b884049"),
"name" : "zhangsan",
"phone" : "",
"email" : "329832984@qq.com",
"sex" : "F"
} {
"_id" : ObjectId("5a66a96306d2a40a8b88404a"),
"name" : "liss",
"phone" : "",
"email" : "12832984@qq.com",
"sex" : "M"
}
三、查询

查询单个主要用到了func (c *Collection) Find(query interface{}) *Query函数,查询单个和多个主要用到了One()和Many()函数,条件组合可以查看mongDB数据库使用。

func GetDataViaSex() {
c := ConnecToDB()
result := Student{}
err := c.Find(bson.M{"sex": "M"}).One(&result)
if err != nil {
log.Fatal(err)
}
fmt.Println("student", result)
students := make([]Student, 20)
err = c.Find(nil).All(&students)
if err != nil {
log.Fatal(err)
}
fmt.Println(students) }

查询所有形如:c.Find(nil).Many(&results)
另外,方法中也有个根据id来查询的方法 func (c *Collection) FindId(id interface{}) *Query,

func GetDataViaId() {
id := bson.ObjectIdHex("5a66a96306d2a40a8b884049")
c := ConnecToDB()
stu := &Student{}
err := c.FindId(id).One(stu)
if err != nil {
log.Fatal(err)
}
fmt.Println(stu)
}
三、更新

更新通过函数

*func (c *Collection) Update(selector interface{}, update interface{}) error
*func (c *Collection) UpdateAll(selector interface{}, update interface{}) (info *ChangeInfo, err error)
*func (c *Collection) UpdateId(id interface{}, update interface{}) error func UpdateDBViaId() {
//id := bson.ObjectIdHex("5a66a96306d2a40a8b884049")
c := ConnecToDB()
err := c.Update(bson.M{"email": "12832984@qq.com"}, bson.M{"$set": bson.M{"name": "haha", "phone": ""}})
if err != nil {
log.Fatal(err)
}
}
四、删除

删除对应的方法

func (c *Collection) Remove(selector interface{}) error]
func (c *Collection) RemoveAll(selector interface{}) (info *ChangeInfo, err error)
func (c *Collection) RemoveId(id interface{}) error
func RemoveFromMgo() {
c := ConnecToDB()
_, err := c.RemoveAll(bson.M{"phone": ""})
if err != nil {
log.Fatal(err)
}
}

Go语言开发中MongoDB数据库的更多相关文章

  1. C语言开发中常见报错的解决方案

    C语言开发中常见报错的解决方案 整理来源于网络,侵权请通知删除.*禁止转载 ---- fatal error C1003: error count exceeds number; stopping c ...

  2. Android 开发中 SQLite 数据库的使用

    SQLite 介绍 SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能.此外它还是开源的,任何人都可以使用它.许多开源项目((Mozilla, PHP, ...

  3. NoSql 中Mongodb数据库的使用

    1.NoSql数据库简介 2.MongoDB数据库的简介 3.MongoDB下Windows下的安装

  4. android开发学习 ------- MongoDB数据库简单理解

    首先说一下MongoDB是什么? MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. MongoDB 是一个基于分布式文件存储的数据库. N ...

  5. Android开发中使用数据库时出现java.lang.IllegalStateException: Cannot perform this operation because the connection pool has been closed.

    最近在开发一个 App 的时候用到了数据库,可是在使用数据库的时候就出现了一些问题,在我查询表中的一些信息时出现了一下问题: Caused by: java.lang.IllegalStateExce ...

  6. Window10系统中MongoDB数据库导入数据文件

    首先进入C:\Program Files\MongoDB\Server\4.0\bin>  打开cmd 创建一个空的数据库集合  db.createCollection("myColl ...

  7. go 语言开发中 GOPATH问题 与 go语言linux 开发环境 教程

    https://github.com/rubyhan1314/Golang-100-Days/blob/master/Day01-15(Go%E8%AF%AD%E8%A8%80%E5%9F%BA%E7 ...

  8. go 语言开发2 简易数据库和web代码示例

    数据库开发示例 package dao import ( "github.com/go-xorm/xorm" "fmt" ) type UserInfo str ...

  9. 对于Linux平台下C语言开发中__sync_函数的认识

      reference:http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html#Atomic-Builtins A built ...

随机推荐

  1. ASP.NET4 与 VS2010 Web 开发页面服务改进

    转:http://blog.163.com/kele_lipeng/blog/static/81345278201132754729336/ 作者:朱先忠 本文将接着上一篇 ASP.NET4与VS20 ...

  2. PHP 权限管理

    login页面 <form action="loginchuli.php" method="post"> <div>用户名:<in ...

  3. 【HTML5校企公益课】第三天

        1.上午2D.旋转变色的... 基本思路就是先写静态画面然后添加动画. <!--告诉浏览器该文件为网页格式--> <html> <!--网页的头部标签--> ...

  4. qt项目: error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1900”不匹配值“1800”

    error LNK2038: 检测到“_MSC_VER”的不匹配项:  值“1900”不匹配值“1800” 该错误 网上通常的解释是: 原因:由于你使用了vs2012,相比较vs2010以及之前的vs ...

  5. 1163: [Baltic2008]Mafia

    1163: [Baltic2008]Mafia Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 123  Solved: 70[Submit][Stat ...

  6. SpringBoot Bean作用域

    Bean在一般容器中都存在以下2种作用域: singleton 默认值,IoC容器只存在单例 prototype 每当从IoC容器中取出一个Bean,则创建一个新的Bean 在Web容器中存在4种作用 ...

  7. Spring AOP(6)-- XML配置

    applicationContext-xml.xml <?xml version="1.0" encoding="UTF-8"?><beans ...

  8. ngnix进阶

    ngnix进阶 nginx: [warn] duplicate MIME type "text/html" in /usr/local/nginx/conf/nginx.conf: ...

  9. bootstrap重置校验方法

    $(function (){ $("select").change(function(){ $('#DepartForm').bootstrapValidator('resetFo ...

  10. jQuery对象和dom对象的转换

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...