首页 > 其他分享 >mongo事务

mongo事务

时间:2024-07-18 20:33:46浏览次数:14  
标签:事务 mongo lockId db session 文档 读取

事务内的读取操作可能会返回旧数据,这称为 陈旧读取。事务内的读取操作不能保证看到其他已提交事务或非事务性写入执行的写入。

db.getSiblingDB("hr").employees.insertOne(
   { _id: 1, status: "Active" }
)
session = db.getMongo().startSession( { readPreference: { mode: "primary" } } )
session.startTransaction( { readConcern: { level: "snapshot" }, writeConcern: { w: "majority" } } )

employeesCollection = session.getDatabase("hr").employees
employeeDoc = employeesCollection.findOneAndUpdate(
   { _id: 1, status: "Active" },
   { $set: { lockId: ObjectId() } },
   { returnNewDocument: true }
)

请注意,在事务内部,findOneAndUpdate操作会设置一个新lockId字段。您可以将lockId字段设置为任何值,只要它修改了文档即可。通过更新文档,事务将获得锁。

如果事务之外的操作在提交事务之前尝试修改文档,MongoDB 会向外部操作返回写冲突错误。

session.commitTransaction()

多文档事务支持"local"、、 "majority""snapshot"阅读关注级别。

对于分片集群上的事务,只有 "snapshot"读取关注才能提供跨多个分片的一致快照。

无论为事务指定了什么写关注,分片集群事务的提交操作都包含一些使用{w: "majority", j: true}写关注的部分。

 

 

 

 

 

 

 

 

标签:事务,mongo,lockId,db,session,文档,读取
From: https://www.cnblogs.com/wonchaofan/p/18310366

相关文章

  • 管理索引mongo
    列出数据库的所有索引db.getCollectionNames().forEach(function(collection){indexes=db[collection].getIndexes();print("Indexesfor"+collection+":");printjson(indexes);});列出特定类型的索引//Thefollowingfindsallhashedindex......
  • mongo索引类型
    要创建单字段索引,请使用以下原型:db.<collection>.createIndex({<field>:<sortOrder>})复合索引要创建复合索引,请使用下列 db.collection.createIndex()方法: db.<collection>.createIndex({<field1>:<sortOrder>,<field2>:<sortOrder&......
  • mongo并发与锁
    MongoDB使用哪种类型的锁定?除了用于读取的共享(S)锁定模式和用于写入操作的独占(X)锁定模式之外,意图共享(IS)和意图独占(IX)模式表示使用更细粒度的锁来读取或写入资源的意图。按一定粒度锁定时,所有更高级别都使用意向锁例如,当锁定一个集合进行写入(使用模式X)时,相应的......
  • 设计模式-领域逻辑模式-事务脚本(Transaction Script)
    事务脚本的特点多数应用可看成由多个事务组成事务脚本将多个业务逻辑组织成单个过程事务间相互修改各自产生的数据事务脚本的运行机制    使用事务脚本时,领域逻辑主要通过系统所执行的事务来组织。例如:预定酒店过程。事务脚本的组织将整个事务脚本放在一个类里每......
  • MongoDB 显示数量方式 , count结果与实际不符合
    直接count结果db.cdc_o2k_kafka_mongoDB.count()//8798768官方解释不准确的原因:a.操作的是分片的集合(前提);b.shard分片正在做块迁移,导致有重复数据出现c.存在孤立文档(因为不正常关机、块迁移失败等原因导致)db.cdc_o2k_kafka_mongoDB.aggregate([{......
  • Spring Boot 开启事务支持详细总结
    Spring对事务的支持        Spring支持两种事务方式,分别是编程式事务和声明式事务,后者最常见,通常情况下只需要一个 @Transactional 就搞定了(代码侵入性降到了最低),就像这样:@TransactionalpublicvoidsavePosts(PostsParampostsParam){//保存文章save(p......
  • Spring事务原理、Spring事务传播机制
    Spring的@EnableTransactionManagement和@Transactional原理@Configuration@EnableTransactionManagementpublicclassAppConfig{//配置类内容}@ServicepublicclassMyService{@TransactionalpublicvoidprocessPayment(Payment......
  • 麒麟sp3安装mongodb报错
    环境:OS:麒麟V10sp3db:4.4.22 [root@localhostconf]#/usr/local/services/mongodb/bin/mongod-f/home/middle/mongodb/conf/mongo.cnf/usr/local/services/mongodb/bin/mongod:errorwhileloadingsharedlibraries:libcrypto.so.10:cannotopensharedobjectfile:......
  • 数据库必知必会-MongoDB
    文章目录1.关系型数据库与非关系型数据库2.MongoDB是最接近关系型数据库的非关系型数据库3.mongodb数据库的基本概念MongoDB命令5.4.node.js操作mongodb(所有对mongodb数据库操作都是异步的)总结1.关系型数据库与非关系型数据库关系型数据库是指表与表之间存在......
  • Linux安装mongodb
    1.安装包下载wgethttps://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.27.tgz2.安装和启动2.1解压tar-zxvfmongodb-linux-x86_64-rhel70-4.0.27.tgz2.2将解压后的目录移动到/usr/local目录下,并改名为mongodbmvmongodb-linux-x86_64-rhel7......