商业公链之区块链技术使用的常见库(六)------Go语言文档数据库"gopkg.in/mgo.v2"

wmgo:gopkg.inmgo.v2的包装 Wrap gopkg.in/mgo.v2 字段说明: ref: 外链表, 格式为:collction_name.bson_tag link: 中间表名 foreign:中间表被引用的字段格式与ref相同 立即下载

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

1.安装mgo:go get gopkg.in/mgo.v2

2.导入mgo包

import ( 

"gopkg.in/mgo.v2" 

"gopkg.in/mgo.v2/bson" 

)

3.通过方法Dial()来和MongoDB服务器建立连接。Dial()定义如下:

func Dial(url string) (*Session, error)

具体使用:

session, err := mgo.Dial(url)

如果是本机,并且MongoDB是默认端口27017启动的话,下面几种方式都可以。

session,err:=mgo.Dial("")

session,err:=mgo.Dial("localhost")

session,err:=mgo.Dial("127.0.0.1")

session,err:=mgo.Dial("localhost:27017")

session,err:=mgo.Dial("127.0.0.1:27017")

如果不在本机或端口不同,传入相应的地址即可。如:

mongodb://myuser:mypass@localhost:40001,otherhost:40001/mydb

4.切换数据库,通过Session.DB()来切换相应的数据库。

func (s *Session) DB(name string) *Database

如切换到test数据库。

db := session.DB("test")

5.切换集合,通过Database.C()方法切换集合(Collection),这样我们就可以通过对集合进行增删查改操作了。

func (db *Database) C(name string) *Collection

如切换到`users`集合。

c := db.C("users")

 6.定义插入的数据结构,ser的字段首字母大写,不然不可见。通过bson:”name”这种方式可以定义MongoDB中集合的字段名,如果不定义,mgo自动把struct的字段名首字母小写作为集合的字段名。如果不需要获得id_,Id_可以不定义,在插入的时候会自动生成,MongoDB每个集合都会一个名为_id的主键,这是一个24位的16进制字符串。对应到mgo中就是bson.ObjectId。:

//定义一个struct,用来和集合对应。

type User struct

{

Id_ bson.ObjectId `bson:"_id"`

Name string `bson:"name"`

Age int `bson:"age"`

JonedAt time.Time `bson:"joned_at"`

Interests []string `bson:"interests"`

}

7.插入数据,插入方法定义如下:

func (c *Collection) Insert(docs ...interface{}) error

下面代码插入两条集合数据。

err = c.Insert(&User{ Id_: bson.NewObjectId(),

Name: "Jimmy Kuu", 

Age: 33, 

JoinedAt: time.Now(),

Interests: []string{"Develop", "Movie"}, }

) 

if err != nil { 

panic(err) 

} 

8.查询数据,通过func (c *Collection) Find(query interface{}) *Query来进行查询,返回的Query struct可以有附加各种条件来进行过滤。通过Query.All()可以获得所有结果,通过Query.One()可以获得一个结果,注意如果没有数据或者数量超过一个,One()会报错。条件用bson.M{key: value},注意key必须用MongoDB中的字段名,而不是struct的字段名。

无条件查询,查询所有,但输出时注意。

var users []User c.Find(nil).All(&users) fmt.Println(users)

上面代码可以把所有Users都查出来:

根据ObjectId查询

id := "5204af979955496907000001"

objectId := bson.ObjectIdHex(id)

user := new(User)

c.Find(bson.M{"_id": objectId}).One(&user)

fmt.Println(user)

更简单的方式是直接用FindId()方法:

c.FindId(objectId).One(&user)

=($eq)

c.Find(bson.M{"name": "Jimmy Kuu"}).One(&users)

!=($ne)

c.Find(bson.M{"name": bson.M{"$ne": "Jimmy Kuu"}}).Onel(&users)

>($gt)

c.Find(bson.M{"age": bson.M{"$gt": 32}}).One(&users)

多条件查询,and($and)

c.Find(bson.M{"name": "Jimmy Kuu", "age": 33}).All(&users)

or($or)

c.Find(bson.M{"$or": []bson.M{bson.M{"name": "Jimmy Kuu"}, bson.M{"age": 31}}}).A

10.修改数据,通过func (*Collection) Update来进行修改操作。

 

func (c *Collection) Update(selector interface{}, change interface{}) error

注意修改单个或多个字段需要通过$set操作符号,否则集合会被替换。

修改字段的值($set)

c.Update(bson.M{"_id": bson.ObjectIdHex("5204af979955496907000001")}, bson.M{"$set": bson.M{ "name": "Jimmy Gu", "age": 34, }})

inc($inc)

字段增加值

c.Update(bson.M{"_id": bson.ObjectIdHex("5204af979955496907000001")}, bson.M{"$inc": bson.M{ "age": -1, }})

push($push)

从数组中增加一个元素

c.Update(bson.M{"_id": bson.ObjectIdHex("5204af979955496907000001")}, bson.M{"$push": bson.M{ "interests": "Golang", }})

pull($pull)

从数组中删除一个元素

c.Update(bson.M{"_id": bson.ObjectIdHex("5204af979955496907000001")}, bson.M{"$pull": bson.M{ "interests": "Golang", }})

删除

c.Remove(bson.M{"name": "Jimmy Kuu"})

11.关闭数据库连接:defer session.Close()

12.设置数据库一致性模式:session.SetMode(mgo.Monotonic, true),session设置的模式分别为:

Strong

session 的读写一直向主服务器发起并使用一个唯一的连接,因此所有的读写操作完全的一致。

Monotonic

session 的读操作开始是向其他服务器发起(且通过一个唯一的连接),只要出现了一次写操作,session 的连接就会切换至主服务器。由此可见此模式下,能够分散一些读操作到其他服务器,但是读操作不一定能够获得最新的数据。

Eventual

session 的读操作会向任意的其他服务器发起,多次读操作并不一定使用相同的连接,也就是读操作不一定有序。session 的写操作总是向主服务器发起,但是可能使用不同的连接,也就是写操作也不一定有序。

本文源码:阅读原文,用法文档:https://godoc.org/gopkg.in/mgo.v2

希望大家关注我的微信公众号,推荐给更多技术极客,日更一篇区块链技术博客不易,有疑问可以后台留言。

从零到一:华为iMaster NCE-Campus部署中的Euler OS与FusionInsight深度解析 本文深入解析华为iMaster NCE-Campus部署中Euler OS与FusionInsight的关键技术要点,包括RAID配置、网络绑定技术、安装避坑指南及性能调优方案。通过实战经验和详细配置示例,帮助工程师提升部署效率与系统稳定性,确保华为企业级解决方案的高效运行。 阅读详情

相关推荐

L298N电机驱动模块的接线使用与代码实现

#include "iostm8s208mb.h" #define u8 uint8_t #define u16 uint16_t #define u32 uint32_t typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned long uint32_t; // 关于LED灯的宏定义 #define LED2 PI_ODR_ODR2 //输出量 #define LE

Clichong 13万+

golang常用库之-mgo.v2包、MongoDB官方go-mongo-driver包、七牛Qmgo包 | go操作mongodb、mongodb bson

mgo.v2包,已经跟不上mongo版本了,很早之前就停止维护了,后面会有更多的兼容性问题。不支持最新版本的mongo(5.x以上)!

西京刀客 4658

电脑主板开机12步流程全解析:从按下电源键到BIOS启动的完整过程

本文深入解析了电脑主板从按下电源键到BIOS启动的完整12步流程,详细阐述了待机电路、主供电上电、CPU供电建立、时钟信号分发及复位链等关键硬件协同工作原理。通过剖析电脑主板的电路结构与芯片协作时序,帮助读者构建系统性的硬件故障诊断思维,精准定位开机故障。

weixin_29290963的博客 265

Golang使用mgo.v2包操作MongoDB的基础示例

golang对MongoDB的操作使用gopkg.in/mgo.v2库操作。如下是基本的一些用法 连接 package main import ( "log" "time" "gopkg.in/mgo.v2" ) const ( Mong golang对MongoDB的操作使用gopkg.in/mgo.v2库操作。如下是基本的一些用法 连接 package main import ( "log" "time" "gopkg.in/mgo.v2" ) const (.

哼哈的专栏 4759

【驭风计划 机器学习】实验6 基于集成学习的 Amazon 用户评论质量预测

¶随着电商平台的兴起,以及疫情的持续影响,线上购物在我们的日常生活中扮演着越来越重要的角色。在进行线上商品挑选时,评论往往是我们十分关注的一个方面。然而目前电商网站的评论质量参差不齐,甚至有水军刷好评或者恶意差评的情况出现,严重影响了顾客的购物体验。因此,对于评论质量的预测成为电商平台越来越关注的话题,如果能自动对评论质量进行评估,就能根据预测结果避免展现低质量的评论。本案例中我们将基于集成学习的方法对 Amazon 现实场景中的评论质量进行预测。

Mege1的博客 471

海思Hi3519AV100 sensor移植实战:IMX586驱动调试与硬件验证全流程

本文详细解析了在海思Hi3519AV100平台上移植索尼IMX586传感器的全流程实战。内容涵盖从硬件I2C通信验证、驱动代码移植与修改,到内核配置、时钟设定,以及使用示波器进行硬件信号深度验证和ISP图像调优等关键步骤,为开发者提供了一套清晰、可复现的sensor移植与调试方法。

weixin_29168393的博客 395

go.mod方式下gopm get安装成功,import之后还是报错的解决办法

版本 go 1.13 过程 一开始直接go go get gopkg.in/gomail.v2时提示: go get gopkg.in/gomail.v2: module gopkg.in/gomail.v2: Get https://proxy.golang.org/gopkg.in/gomail.v2/@v/list: dial tcp 216.58.200.49:443: conne...

LLLLL2025的博客 2588

ARKit面部动画实战:如何用blend shape让数字人表情更自然(附中文对照表)

本文深入探讨了如何利用ARKit的blend shape技术驱动数字人面部动画,以实现更自然生动的表情。文章提供了详细的blend shape中文对照表,并分享了实战技巧,包括构建复合表情动画序列、处理不对称性与微表情,以及性能优化策略,旨在帮助开发者高效提升数字人的表情表现力。

weixin_29292535的博客 324

golang使用mongoDB - mgo.v2

下面是我的模块代码你可以go get github.com/yihubaikai/gopublic/mongo里面下载 package mongoimport ( "fmt" "github.com/yihubaikai/gopublic" "gopkg.in/mgo.v2" "gopkg.in/mgo.v2/bson" //"log")//单条数据节点...

afumz68826的专栏 776

qt实现程序密钥注册功能,MD5加密+AES加密,并实现一台电脑系统一个密钥

qt实现了一个给自己软件加密的功能。 原理是: 需要被注册的软件第一次运行的时候,在系统的注册表里面注册一个键值,如下: 这个值作为生成密钥的用户识别号,然后生成密钥文件key.db,把这个key.db文件放到软件执行目录下,即可完成软件的注册并正常使用软件。 软件第一次打开的界面及密钥生成工具软件界面如下: 将密钥生成工具软件生成的key.db放到软件执行目录下之后,软件即可正常使用,如下图: 代码使用了MD5加密 外加 AES加密, 解密和加密的核心代码如下: QSt.

weixin_43935474的博客 4128

RT-DETR算法优化改进:DCNv4更快收敛、更高速度、更高性能,效果秒杀DCNv3、DCNv2等 ,助力检测

DCNv4更快收敛、更高速度、更高性能,完美和RT-DETR结合,助力涨点

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1322

mgo.v2使用文档【链】

原文:https://my.oschina.net/ffs/blog/300148

weixin_34320159的博客 1035

⑤单细胞学习-cellchat组间通讯差异分析

参考:

hx2024的博客 1980

商业公链源码解析(零)------目录

有了大把基础知识,又有了区块链技术的追求,不分析一把竞争对手的区块链源码,不见一见商业级源码风采,岂不是很亏,感谢这个开源的区块链技术世界,正是开源,才让我们一睹区块链风采,追赶先行者脚步。哈哈,摸着石头过河,好爽。 项目介绍:目前分析商业源码,从而构建区块链架构意识,落地具体技术。 项目步骤: 区块链架构和技术 区块链技术所用的常见库 区块链各个模块设计及核心代码 目录: 商业公链之...

Rcvisual的博客 671

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

golang mongo 查询总结

golang 使用 “gopkg.in/mgo.v2” 查询mongo总结。mongo的增加,更新和删除操作比较简单,查询操作相对灵活复杂一些,下面对golang 查询 mongo 做个总结。完整代码上传到了 https://gitee.com/truthalone/go-mongo.git 。 1.连接 mongo //mongo.go package main import ( "errors" "time" "gopkg.in/mgo.v2" ) // 连接mongodb数据库 var

tianwenxue的专栏 6803

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Go 的 MogonDB 包 mgo 使用

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33978016的博客 141

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

go mgo包 简单封装 mongodb 数据库驱动

mgo是go编写的mongodb的数据库驱动,集成到项目中进行mongodb的操作很流畅,以下是对其的一些简单封装,具体使用可随意改动封装。 安装 go get gopkg.in/mgo.v2 使用 引入第三方包 import ( "gopkg.in/mgo.v2" "gopkg.in/mgo.v2/bson" ) 初始化连接 var ( GVA_MONGO_DB *mgo...

牛奔的博客 1051

Golang : Bson\Json互转

【代码】Golang : Bson\Json互转。

听我一言的博客 1533

mgo.v2无法连接MongoDB 5.0.x

MongoDB升级到5.0.1之后,使用gopkg.in/mgo.v2来连接MongoDB数据库时,发现验证时出现验证错误了。server returned error on SASL authentication step: BSON field 'saslContinue.mechanism' is an unknown field.。

西京刀客 2015

go语言操作mongoDB之mgo

首先,先引入下载好的mgo包 import ( "fmt" "gopkg.in/mgo.v2" "gopkg.in/mgo.v2/bson" ) type Person struct { Name string Phone string } func main() { //数据库操作 session, err := mgo.Dial("localhost") if err != nil { panic(err) } defer session.Close() session.SetM

Kf_loseHair的博客 439

mgo 操作MongoDB数据库(模糊查询,单查询,多查询,修改,增加,删除)

官方文档链接: https://pkg.go.dev/gopkg.in/mgo.v2#Collection 直接上代码: func main() { opertion() } func opertion() { //192.168.1.201:27018 db, err := mgo.Dial("192.168.1.201:27018") if err != nil { fmt.Println(err) } defer db.Close() db.SetMode(mgo.Monotoni

yimi_haha的博客 1381

Go Mongo存在过多的活动连接问题

文章目录问题描述:问题原因尝试过的解决方法解决方法相关链接 问题描述: 在使用 gopkg.in/mgo.v2 这个库的时候,会出现活动连接数过多的情况,并且之后的TCP 连接会达到一个顶峰:默认是4096个连接。 问题原因 每次当我们Copy,Clone 这个库的Session,使用完毕之后Close,他不是真正地Close连接,而是把这个连接放入连接池里面,所以如果同时对DB有很多的请求...

nia305的博客 1855

golang mongodb驱动mgo异常崩溃问题

##背景在我的后端游戏架构中,有一个golang开发的数据服务器,用来存储落地玩家的历史数据,并提供给客户端http接口查询。由于之前的项目已经在使用mongodb,出于方便易用支持类json格式的bson类型,且mongodb3.0以后引入了高效的WiredTiger引擎,因此该数据服务也直接使用mongodb作为落地存储和缓存。mongodb官方提供了各种语言的驱动,但是并没提供官方驱动,业界...

thunder54007的专栏 2474

Golang 中操作 Mongo Update 的方法

这篇博客主要记录下 Golang 中引入 Mongo 数据库对 Mongo 的修改操作的方法。使用gopkg.in/mgo.v2库操作,修改操作主要使用mongodb中Collection对象的Update、UpdateAll、UpdateId、Upsert、UpsertId方法。统一封装下getDB方法package mainimport ( "fmt" "gopkg.in/mgo.

GeekDavis 的博客 1万+

Golang mgo (长连接/重连)

原文连接:https://blog.csdn.net/pkueecser/article/details/50528218 最佳使用方法: http://denis.papathanasiou.org/posts/2012.10.14.post.html 可稍微参考: https://github.com/goinggo/beego-mgo/blob/a78190c1e061ffa5fcc0...

独一无二的小个性 2524
上一篇: Go语言学习笔记(十七)------数据库MongoDB学习笔记
下一篇: 商业公链之区块链技术使用的常见库(七)------Go语言缓存LRU库"github.com/hashicorp/golang-lru"
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值