Mongodb支持事务吗?

一、概念

1.1、MongoDB事务简介

MongoDB 是一个非关系型数据库管理系统,最初并不支持事务。然而,随着时间的推移,MongoDB 在其4.0版本中引入了多文档事务支持,使得在单个集合中执行多个操作成为可能。

In MongoDB, an operation on a single document is atomic. Because you can use embedded documents and arrays to capture relationships between data in a single document structure instead of normalizing across multiple documents and collections, this single-document atomicity obviates the need for distributed transactions for many practical use cases.

For situations that require atomicity of reads and writes to multiple documents (in a single or multiple collections), MongoDB supports distributed transactions. With distributed transactions, transactions can be used across multiple operations, collections, databases, documents, and shards.

译文:

在MongoDB中,对单个文档的操作是原子的。因为您可以使用嵌入式文档和数组来捕获单个文档结构中的数据之间的关系,而不是在多个文档和集合之间进行规范化,所以这种单文档原子性消除了许多实际用例中对多文档事务的需求。

对于需要原子性地读写多个文档(在单个或多个集合中)的情况,MongoDB支持多文档事务。使用分布式事务,可以跨多个操作,集合,数据库,文档和分片使用事务。

1.2、事务和原子性

在MongoDB中,对单个文档的操作是原子的。从MongoDB 4.2开始,分布式事务和多文档事务是同义词。 分布式事务是指分片群集和副本集上的多文档事务。 从MongoDB 4.2开始,多文档事务(无论是在分片群集或副本集上)也称为分布式事务。

二、具体操作

2.1、配置事务

在测试mongodb之前要先配置一下事务,MongoDB 的事务只能在开启副本集的时候才能使用,一般安装后默认是单副本,我们配置将其配置成多副本后再运行事务。不然的话会报以下错误。↓↓↓

MongoServerError: Transaction numbers are only allowed on a replica set member or mongos

step1:

vim /usr/local/mongodb/mongodb.conf

在最后面增加

replication:

replSetName: rs0

step2:

保存后重启mongodb,然后进入执行

/usr/local/mongodb/bin/mongo

step3:

rs.initiate()

到这里就成功后,后面就可以去测试事务了。

2.2、事务示例

1)多文档事务支持(Multi-document Transactions)

多文档事务允许在一个事务中对多个文档执行读写操作,跨越多个集合或单个集合的多个文档。这确保了这些操作要么全部成功提交,要么全部失败回滚,从而保持数据的一致性。

示例命令行事务示例(使用 MongoDB Shell):

// 开启一个会话
session = db.getMongo().startSession();
//创建两个集合
coll1 = session.getDatabase("mydb1").collection1;
coll2 = session.getDatabase("mydb1").collection2;
// 在会话中启动事务
session.startTransaction();try {coll1.insertOne({ id: 1 ,name:"001"});coll2.insertOne({ id: 2, name: "002" });// 如果一切顺利,提交事务session.commitTransaction();
} catch (error) {// 发生错误时,回滚事务session.abortTransaction();
}

在多文档事务中支持以下读/写操作:

2)回滚与提交(Rollback and Commit)

如果事务中的任何操作失败,整个事务将被回滚,之前所做的修改都不会被应用到数据库中。只有当所有操作都成功完成时,事务才会被提交并应用到数据库中。

示例:

// 开启一个会话
session = db.getMongo().startSession();
//创建两个集合
coll1 = session.getDatabase("mydb1").collection1;
coll2 = session.getDatabase("mydb1").collection2;
// 在会话中启动事务
session.startTransaction();try {coll1.insertOne({ id: 1 ,name:"001"});coll2.insertOne({ id: 2, name: "002" });//模拟一个错误throw "Some error occurred";// 如果一切顺利,提交事务session.commitTransaction();
} catch (error) {// 发生错误时,回滚事务session.abortTransaction();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/827250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iStat Menus for Mac:强大的系统监控工具

iStat Menus for Mac是一款功能强大的系统监控工具,专为Mac用户设计,旨在帮助用户全面了解电脑的运行状态,提高电脑的性能和稳定性。 iStat Menus for Mac v6.73 (1239)中文版下载 该软件可以实时监测CPU使用率、内存占用、网络速度、硬盘活动…

“磁性蝴蝶”:创新结构纳米石墨烯能更精确控制自旋磁行为

内容来源:量子前哨(ID:Qforepost) 文丨浪味仙 深度好文:1300字丨7分钟阅读 摘要:新加坡国立大学的研究团队,开发出一种蝴蝶形磁性纳米石墨烯,包含四个具有铁磁和反铁磁相互作用的不…

微信小程序:基于MySQL+Nodejs的汽车品牌管理系统

各位好,接上期,今天分享一个通过本地MySQLNodejs服务器实现CRUD功能的微信小程序,一起来看看吧~ 干货!微信小程序通过NodeJs连接MySQL数据库https://jslhyh32.blog.csdn.net/article/details/137890154?spm1001.2014.3001.5502 …

深入docker-swarm overlay网络模型

目录 1.简介 2.网络模型 3.docker_gwbridge网络 3.1.docker_gwbridge网关地址 3.2.检查docker_gwbridge网络 3.2.1.查找任务容器eth接口 3.2.2.查找ingress-sbox容器eth接口 4.检查ingress网络 4.1.检查ingress网络 4.2.检查ingress网络的命名空间 4.2.1.查找任务容…

Windows搭建Svn服务器

1、svn概述 1.1、svn简介 SVN(Subversion)是一个开源的版本控制系统,用于管理代码的版本控制和协作开发。它提供了一系列的命令行工具,以及一套客户端和服务器架构,用于管理代码的版本控制和协作。 在Windows系统&a…

STM32的GPIO控制寄存器开发

寄存器GPIO控制 寄存器地址 寄存器地址计算 某个寄存器地址,由三个参数决定:1、总线基地址(BUS_BASE_ADDR);2,外设基于总线基地址的偏移量(PERIPH_OFFSET);3&#xff…

百面算法工程师 | 分类和聚类

目录 6.1 为什么正确率有时不能有效评估分类算法? 6.2 什么样的分类器最好? 6.3 什么是聚类,你知道哪些聚类算法? 6.4 K-Means聚类算法如何调优? 6.5 K-Means聚类算法如何选择初始点? 6.6 K-Means聚类聚的是特征还是样本 …

【面试经典 150 | 链表】删除链表的倒数第 N 个结点

文章目录 写在前面Tag题目来源解题思路方法一:统计节点个数方法二:双指针 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本…

向媒体投稿有了好方法财政单位信息宣传工作简单又轻松

当我初涉财政单位的信息宣传岗位,肩负起对外展示单位风采、传播政策信息的重要职责时,我深刻体验到了投稿之路的艰辛曲折。初期,对于如何有效对接媒体并成功发表稿件,我感到一片茫然,仿佛置身于浩瀚的信息海洋中,无从下手。 那时,我的工作日常就是广泛搜集各类媒体的联系方式,特…

{“errMsg“:“insertXWebCamera:fail appid privacy api banned“}

问题描述:微信小程序,在体验版本测试时,调用摄像头OK,没有任何问题,部署发布版本后,日志报错内容:{"errMsg":"insertXWebCamera:fail appid privacy api banned"}&#xff…

CountDownLatch倒计时器源码解读与使用

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Java全栈-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 目录 1. 前言 2. CountDownLatch有什么用 3. CountDownLatch底层原理 3.1. count…

代理设置方法 ubuntu git

目录 ubuntu设置代理方法 git 中 ubuntu设置代理方法 (1) .bashrc中写 或者 (2) 当自己的 虚拟机选择default switch,保持了虚拟机与本机的联通性(host模式好像),这时&#xff0…

深度剖析图像处理—边缘检测

什么是边缘检测 边缘检测(Edge Detection)就是提取图像中的边缘点(Edge Point)。边缘点是与周围像素相比灰度值有阶跃变化或屋顶状变化的像素。边缘常存在于目标与背景之间、目标与目标之间、目标与其影子之间。 ​ 在图像处理和图像分析中,经常要用到边缘(Edge)、边…

【Git】生成patch和应用patch

生成patch 将本地所有修改打成补丁 git diff > /tmp/xxx.patch将本地对某个文件的修改打成补丁 git diff test/1.txt > /tmp/1.patch将某一次提交的修改内容打成补丁 -1表示只为单个提交创建patch,-o表示输出patch的文件夹路径,默认是用提交的…

D咖饮品机器人惊艳亮相:智能硬件改变生活习惯

在当今快节奏的生活中,人们对于便捷、高效的需求日益增长,智能硬件应运而生,其中饮品机器人作为一种新型的智能设备,正在以惊艳的姿态亮相于人们的生活中,为人们带来了全新的消费体验,改变着大众的生活习惯…

node-sass安装失败解决

老项目安装node-sass4.14.1一直失败 "node-sass": "^4.14.1",报错环境变量Path 中没有 python2.7 gyp verb check python checking for Python executable "python2.7" in the PATH安装python2.7,然后设置npm config set python C:\Python27 …

vulfocus的使用

vulfocus的使用 1.拉取镜像 docker pull vulfocus/vulfocus:latest 2.运行 docker run -d -p 80:80 -v /var/run/docker.sock:/var/run/docker.sock -e VUL_IP192.168.0.105 vulfocus/vulfocus 3.访问 用户名:admin 密码:admin

【机器学习】特征筛选实例与代码详解

机器学习中的特征筛选 一、特征筛选的重要性与基本概念二、特征筛选的方法与实践1. 基于统计的特征筛选2. 基于模型的特征筛选3. 嵌入式特征筛选 三、总结与展望 在机器学习领域,特征筛选作为预处理步骤,对于提高模型性能、简化模型结构以及增强模型解释…

街道社区信息宣传工作做的好这个投稿方法不能少

作为一名刚刚接手街道社区信息宣传工作的新人,伊始对于如何有效地向各大媒体平台投稿我可谓是一头雾水。那时的日子充满了曲折与挑战,每一步都似乎布满了荆棘。为了让更多居民了解社区的工作动态和服务亮点,我怀揣着满腔热情,着手撰写一篇篇生动详实的新闻稿件。然而,投稿的过程…

SpringAOP从入门到源码分析大全(三)ProxyFactory源码分析

文章目录 系列文档索引五、ProxyFactory源码分析1、案例2、认识TargetSource(1)何时用到TargetSource(2)Lazy的原理(3)应用TargetSource 3、ProxyFactory选择cglib或jdk动态代理原理4、jdk代理获取代理方法…