go语言操作mongodb
Install the MongoDB Go Driver
The MongoDB Go Driver is made up of several packages. If you are just using go get, you can install the driver using:
go get github.com/mongodb/mongo-go-driver
// go get github.com/mongodb/mongo-go-driver/mongo
Example code
package main
import (
"context"
//"encoding/json"
"fmt"
"github.com/mongodb/mongo-go-driver/bson"
"github.com/mongodb/mongo-go-driver/mongo"
"github.com/mongodb/mongo-go-driver/mongo/options"
"log"
"time"
)
func main() {
// 连接数据库
ctx, _ := context.WithTimeout(context.Background(), 10*time.Second) // ctx
opts := options.Client().ApplyURI("mongodb://localhost:27017") // opts
client, _ := mongo.Connect(ctx,opts) // client
// 使用
db := client.Database("mark") // database
stu := db.Collection("student") // collection
// 插入数据 直接使用student struct实例
xm := Student{Name:"小明",Age:17,Sex:M,}
res, _ := stu.InsertOne(ctx,xm)
// 查询数据 bson.D{}创建查询条件
cur, err := stu.Find(ctx, bson.D{}) // find
CheckError(err)
// 延时关闭游标
defer cur.Close(ctx)
for cur.Next(ctx) {
// 可以decode到bson.M 也就是一个map[string]interface{}中
// 也可以直接decode到一个对象中
s := &Student{}
var result bson.M
err := cur.Decode(&result) // decode 到map
err = cur.Decode(s) // decode 到对象
CheckError(err)
// do something with result....
// 可以将map 或对象序列化为json
//js ,_:=json.Marshal(result)
//json.Unmarshal(js,s) //反学序列化回来
fmt.Println(s)
}
}
type Gender uint8
const (
M = iota
F
)
type Student struct {
Name string `json:"name"`
Age int `json:"age"`
Sex Gender `json:"gender"`
}
func CheckError( err error){
if err != nil {
log.Println(err.Error())
return
}
}
Use BSON Objects in Go
JSON documents in MongoDB are stored in a binary representation called BSON (Binary-encoded JSON). Unlike other databases that store JSON data as simple strings and numbers, the BSON encoding extends the JSON representation to include additional types such as int, long, date, floating point, and decimal128. This makes it much easier for applications to reliably process, sort, and compare data. The Go Driver has two families of types for representing BSON data: The D types and the Raw types.
The D family of types is used to concisely build BSON objects using native Go types. This can be particularly useful for constructing commands passed to MongoDB. The D family consists of four types:
D: A BSON document. This type should be used in situations where order matters, such as MongoDB commands.M: An unordered map. It is the same asD, except it does not preserve order.A: A BSON array.E: A single element inside aD.
Here is an example of a filter document built using D types which may be used to find documents where the name field matches either Alice or Bob:
bson.D{{
"name",
bson.D{{
"$in",
bson.A{"Alice", "Bob"}
}}
}}
The Raw family of types is used for validating a slice of bytes. You can also retrieve single elements from Raw types using a Lookup(). This is useful if you don't want the overhead of having to unmarshall the BSON into another type. This tutorial will just use the D family of types.
func main(){
// bson.D 是一组key-value的集合 有序
d :=bson.D{
{"Name","mark"},
{"Age",12},
}
x :=d.Map() // 可以转为map
fmt.Println(x)
// bson.M是一个map 无序的key-value集合,在不要求顺序的情况下可以替代bson.D
m :=bson.M{
"name":"mark",
"age":12,
}
fmt.Println(m)
// bson.A 是一个数组
a := bson.A{
"jack","rose","jobs",
}
fmt.Println(a)
// bson.E是只能包含一个key-value的map
e :=bson.E{
"name","mark",
}
fmt.Println(e)
}
Normal usages
Test connection is valid or not
//pingerr :=client.Ping(ctx,nil)
pingerr :=client.Ping(ctx,readpref.Primary())
if pingerr != nil{
fmt.Println(pingerr)
return
}
Get database or collection
c := client.Database("db_name").Collection("collection_name")
Drop collection
collection.Drop(ctx)
CRUD Operations
Insert Documents
insertOneRes, err := collection.InsertOne(ctx, data)
//InsertMany
Select Documents
// 查询单条数据
err := collection.FindOne(ctx, bson.D{{"name", "howie_2"}, {"age", 11}}).Decode(&obj)
// 查询单条数据后删除该数据
err = collection.FindOneAndDelete(ctx, bson.D{{"name", "howie_3"}})
// 询单条数据后修改该数据
err = collection.FindOneAndUpdate(ctx, bson.D{{"name", "howie_4"}}, bson.M{"$set": bson.M{"name": "这条数据我需要修改了"}})
// 查询单条数据后替换该数据
FindOneAndReplace(ctx, bson.D{{"name", "howie_5"}}, bson.M{"hero": "这条数据我替换了"})
// 一次查询多条数据(查询createtime>=3,限制取2条,createtime从大到小排序的数据)
cursor, err = collection.Find(ctx, bson.M{"createtime": bson.M{"$gte": 2}}, options.Find().SetLimit(2), options.Find().SetSort(bson.M{``"createtime"``: -1}))
// 查询数据数目
Count
Update Document
// 修改一条数据
updateRes, err := collection.UpdateOne(ctx, bson.M{``"name"``: ``"howie_2"``}, bson.M{``"$set"``: bson.M{``"name"``: ``"我要改了他的名字"``}})
// 修改多条数据
updateRes, err = collection.UpdateMany(ctx, bson.M{``"createtime"``: bson.M{``"$gte"``: 3}}, bson.M{``"$set"``: bson.M{``"name"``: ``"我要批量改了他的名字"``}})
Delete Documents
// 删除1条
delRes, err = collection.DeleteOne(ctx, bson.M{``"name"``: ``"howie_1"``})
// 删除多条
delRes, err = collection.DeleteMany(getContext(), bson.M{``"createtime"``: bson.M{``"$gte"``: 7}})
go语言操作mongodb的更多相关文章
- GO学习-(26) Go语言操作mongoDB
Go语言操作mongoDB mongoDB是目前比较流行的一个基于分布式文件存储的数据库,它是一个介于关系数据库和非关系数据库(NoSQL)之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. ...
- 使用python语言操作MongoDB
MongoDB是一个跨平台的NoSQL,基于Key-Value形式保存数据.其储存格式非常类似于Python的字典,因此用Python操作MongoDB会非常的容易. pymongo的两种安装命令 p ...
- Go操作MongoDB
mongoDB是目前比较流行的一个基于分布式文件存储的数据库,它是一个介于关系数据库和非关系数据库(NoSQL)之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. mongoDB介绍 mon ...
- 学习MongoDB--(11):应用举例(利用java操作MongoDB)
原文地址:http://blog.csdn.net/drifterj/article/details/7948090 目录地址:http://blog.csdn.net/DrifterJ/articl ...
- Mongodb入门并使用java操作Mongodb
转载请注意出处:http://blog.csdn.net/zcm101 最近在学习NoSql,先从Mongodb入手,把最近学习的总结下. Mongodb下载安装 Mongodb的下载安装就不详细说了 ...
- 使用Python操作MongoDB
MongoDB简介(摘自:http://www.runoob.com/mongodb/mongodb-intro.html) MongoDB 由C++语言编写,是一个基于分布式文件存储的开源数据库系统 ...
- Python操作MongoDB看这一篇就够了
MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档.数组及文档数组,非常灵活.在这一节中,我们就来看 ...
- Node操作MongoDB并与express结合实现图书管理系统
Node操作MongoDB数据库 原文链接:http://www.xingxin.me/ Web应用离不开数据库的操作,我们将陆续了解Node操作MongoDB与MySQL这是两个具有代表性的数据库, ...
- 在ASP.NET Core2上操作MongoDB就是能这么的简便酷爽(自动完成分库分表)
NoSQL是泛指非关系型的数据库,现今在我们的项目中也多有使用,其独特的优点为我们的项目架构带来了不少亮点,而我们这里的主角(MongoDB)则是NoSQL数据库家族中的一种.事实上,NoSQL数据库 ...
随机推荐
- python—启动自带shell时报错(丢失api-ms-win-crt-runtime-l1-1-0.dll)已解决
备注: 有的伙伴安装完1后重启,问题可以解决,summer儿在安装完1依然未能解决,于是又进行了2的安装再次重启后问题解决!! 1,安装vc-redist.x64,微软官网搜索免费下载,安装后重启. ...
- virtual box下安装ubuntu经验
1. 哪怕下载的是ubuntu64位版本,也在vitualbox下选择ubuntu而不要选择ubuntu(64bit) 2. 安装VBoxGuestAdditional.iso:下载和vbox版本相匹 ...
- Python之并发编程-协程
目录 一.介绍 二. yield.greenlet.gevent介绍 1.yield 2.greenlet 3.gevent 一.介绍 协程:是单线程下的并发,又称微线程,纤程.英文名Coroutin ...
- 【Alpha】阶段第七次Scrum Meeting
[Alpha]阶段第七次Scrum Meeting 工作情况 团队成员 今日已完成任务 明日待完成任务 刘峻辰 增加上课信息接口 编写按学院搜索课程接口 赵智源 构建后测试点测试框架 构建前测试点测试 ...
- JAVA开发环境的熟悉
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1352 姓名:马悦 学号:20135235 成绩: 指导教师:娄嘉鹏 实验日期:2015.4.13 实验密级: 预习程度 ...
- 《Spring2之站立会议6》
<Spring2之站立会议6> 昨天,向主界面中加入语音功能部分的代码: 今天,查相关资料解决debug: 遇到问题,一些问题是得到解决了,但是一些还未被解决.
- 配置ssh免密码登入
首先要设置好主机名hostnamectl,然后编辑文件/etc/hosts 192.168.43.9 node0 192.168.43.10 node1 192.168.43.11 node2 ...
- Beta阶段团队项目开发篇章2
例会时间: 2016.12.4 例会照片 个人工作 上阶段任务验收: 组员任务都已完成. 任务分配 组员 任务内容 韩慧敏 对调查问卷的结果进行分析和总结,确定Beta阶段各任务的优先级,撰写相关博客 ...
- testng对执行失败的用例,再次执行
前段时间在网络上看到通过重写TestNG的接口,可以再次执行失败的测试用例,于是学习了,我之前的做法是当自己的脚本中碰到异常,就自动调用方法本身来达到再次执行用例的目的,这个过程中有设定重试的次数 对 ...
- 关于mysqlbinlog的重要性.
今天在做update更新数据的时候,因为没有统一好需要更新的数据编执行了update操作,所以需要回滚到先前的数据,所以就赶紧去服务器看binlog日志,结果一看binlog竟然没有开启,把我给惊的啊 ...