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数据库 ...
随机推荐
- 2015第六届蓝桥杯C/C++ B组
奖券数目:枚举 有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利.虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖券号码是5位数(10000-99999),要求其 ...
- linux go环境安装
方法一 这次将源码包安装的目录是是/root下. 1.官网下载源码包. 官网链接:https://golang.org/dl/ wget https://storage.googleapis.co ...
- shell--read命令
read命令 -p(提示语句) -n(字符个数) -t(等待时间) -s(不回显) 1.基本读取read命令接收标准输入(键盘)的输入,或其他文件描述符的输入(后面在说).得到输入后,read命令将数 ...
- BugPhobia开发篇章:Scurm Meeting-更新至0x03
0x01 :目录与摘要 If you weeped for the missing sunset, you would miss all the shining stars 索引 提纲 整理与更新记录 ...
- Daily Scrumming* 2015.10.25(Day 6)
一.总体情况总结 1.UI今日总结:初步设计了社团详情界面 2.后端今日总结:讨论并设计数据库,表内容,属性和相互联系等,并在rails的activeRecord和activeModel中实现,同时设 ...
- CS小分队第二阶段冲刺站立会议(6月2日)
昨日成果:攻克了按钮移动的问题: 遇到问题:一开始按钮移动时候,非常慢,因为是根绝相对位移差来移动,延时很严重,后来改用用鼠标的位置作为按钮的移动位置,效果明显. 按钮的mousedown事件和mou ...
- “吃神么,买神么”的第一个Sprint计划(第四天)
“吃神么,买神么”项目Sprint计划 ——5.24 星期日(第四天)立会内容与进度 摘要:logo做出来了,但是在立会展示时遭到反对,不合格,重新设计.(附上失败的logo图) 目前搜索栏出来了, ...
- 项目冲刺Beta第三篇博客
Beta版本冲刺计划安排 1.当天站立式会议照片: 2.工作分工: 团队成员 分工 张洪滨060 排行榜界面美化 陈敬轩059 注册成功界面美化 黄兴067 登录界面美化 林国梽068 答题界 ...
- VS2013的安装与C#进行简单单元测试(英文版教程)
这次安装这个软件可是花了我不少时间,其中遇到的问题不言而喻,下面讲解一下我完成这次作业以及分享一些个人体会吧! 第一步:提供下载地址(https://www.visualstudio.com/down ...
- Keil MDK中的Code, RO-data , RW-data, ZI-data分别代表什么意思?(转)
一 基础知识 字节 8位半字 16位字 32位 二 解惑 Code, RO-data,RW-data,ZI-data Code为程序代码部分RO-data 表示 程序定义的常量const t ...