老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

mongodb有沒有事務

今天就跟大家聊聊有關MongoDB有沒有事務,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

創新互聯建站專注于企業成都全網營銷推廣、網站重做改版、玉龍網站定制設計、自適應品牌網站建設、H5頁面制作商城系統網站開發、集團公司官網建設、外貿網站建設、高端網站制作、響應式網頁設計等建站業務,價格優惠性價比高,為玉龍等各大城市提供網站開發制作服務。

MongoDB 4.0 引入的事務功能,支持多文檔 ACID 特性,例如使用 mongo shell 進行事務操作。

> s = db.getMongo().startSession()
    session { "id" : UUID("3bf55e90-5e88-44aa-a59e-a30f777f1d89") }
    > s.startTransaction()
    > session.getDatabase("mytest").coll01.insert({x: 1, y: 1})
    WriteResult({ "nInserted" : 1 })
    > session.getDatabase("mytest").coll02.insert({x: 1, y: 1})
    WriteResult({ "nInserted" : 1 })
    > s.commitTransaction()  (或者 s.abortTransaction()回滾事務)

支持 MongoDB 4.0 的其他語言 Driver 也封裝了事務相關接口,用戶需要創建一個 Session,然后在 Session 上開啟事務,提交事務。例如:

python 版本

with client.start_session() as s:
    s.start_transaction()
    collection_one.insert_one(doc_one, session=s)
    collection_two.insert_one(doc_two, session=s)
    s.commit_transaction()

java 版本

try (ClientSession clientSession = client.startSession()) {
   clientSession.startTransaction();
   collection.insertOne(clientSession, docOne);
   collection.insertOne(clientSession, docTwo);
   clientSession.commitTransaction();
}

一、預備工作

1、MongoDB需要4.0版本+

2、需要自己搭建MongoDB復制集,單個mongodb server 不支持事務。

事務原理:mongodb的復制至少需要兩個節點。其中一個是主節點,負責處理客戶端請求,其余的都是從節點,負責復制主節點上的數據。mongodb各個節點常見的搭配方式為:一主一從、一主多從。主節點記錄在其上的所有操作oplog,從節點定期輪詢主節點獲取這些操作,然后對自己的數據副本執行這些操作,從而保證從節點的數據與主節點一致。

3、搭建復制集步驟

啟動mongo主節點實例,bin目錄下命令窗口執行,復制集命名為doudou, 8080端口的數據庫文件位于db1目錄下,--dbpath=路徑寫自己的,啟動后勿關閉命令窗口

mongod --replSet doudou --dbpath=E:\mongoDb\data\db1 --port=8080  

啟動mongo從節點實例,bin目錄下命令窗口執行,復制集命名為doudou, 8081端口的數據庫文件位于db2目錄下,--dbpath=路徑寫自己的,啟動后勿關閉命令窗口

mongod --replSet doudou --dbpath=E:\mongoDb\data\db2 --port=8081

兩個節點啟動后,bin目錄下打開命令窗口,連接主節點

mongo --port=8080

命令初始化

rs.initiate()

兩個節點啟動后,bin目錄下打開命令窗口,連接主節點

mongo --port=8080

成功后如圖:

mongodb有沒有事務

命令初始化

rs.initiate()

效果如圖:

mongodb有沒有事務

成功的結果是(ok項是1,失敗是0)

查看是否是主節點 rs.isMaster()

查看復制集狀態 rs.status()

初始化配置

rs.conf()

向主節點添加從節點

rs.add("localhost:8081")

查看主節點狀態

rs.status()

復制集配置完成。

二、復制集中的坑點

1、需使用mongoose.connection對集合進行事務操作,其他model的CRUD方法不支持事務。

mongoose.connection.collection('集合名') // 注:集合名需要小寫且加s,如model為Cat,集合名這里應寫為cats

2、觸發Schema定義的中間件默認值需要構造model實例

const CatSchema = new Schema({
    name: {
        type: String
        default: 'cat'
    },
    created: {
     type: Date,
     default: Date.now
  }
})
 
const Cat = mongoose.model('Cat', CatSchema)
 
new Cat() // 觸發中間件

3、insertOne,findOneAndUpdate等方法對數據的新增,需上面第二點進行依賴,否則直接insertOne插入一條數據,定義的默認值不會觸發,如created字段,chema內部定義的type:Schema.ObjectId的相應字段,insertOne插入后都會變成字符串類型,不是Schema.ObjectId類型。

// 解決方式
//新增
 
const Cat= new Cat();
const data = {name: 5}
for (let key in data) {
      Cat[key] = data[key];
    }
db.collection('cats').insertOne(Cat);
 
// 查詢修改
 
db.collection('cats')
.findOneAndUpdate({_id: mongoose.Types.ObjectId(你的id)}, {$set: {name: 修改值}})

三、開始事務

注:以下皆為egg實例代碼

封裝獲取session函數

// 獲取session,回滾事務
  async getSession(opt = {
    readConcern: { level: "snapshot" },
    writeConcern: { w: "majority" }
  }) {
    const { mongoose } = this.app
    const session = await mongoose.startSession(opt);
    await session.startTransaction();
    return session
  }

執行事務邏輯

const { mongoose } = this.ctx.app;
const session = await this.ctx.getSession();
const db = mongoose.connection;
try {
  const data = this.ctx.request.body;
  const Cat = new this.ctx.model.Cat();
  for (let key in data) {
    Cat[key] = data[key]
  }
  await db
    .collection('cats')
    .insertOne(Cat, { session });
  // 提交事務
  await session.commitTransaction();
  this.ctx.end();
} catch (err) {
  // 回滾事務
  await session.abortTransaction();
  this.ctx.logger.error(new Error(err));
} finally {
  await session.endSession();
}

看完上述內容,你們對mongodb有沒有事務有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注創新互聯行業資訊頻道,感謝大家的支持。


當前文章:mongodb有沒有事務
文章轉載:http://www.xueling.net.cn/article/gghcsg.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 五月婷久久综合狠狠爱97 | 国产第一页第二页 | 激情五月婷婷综合网 | 日本亚洲一区 | 日日操av | 久久AⅤ无码AV高潮AV喷吹 | 五月天婷婷伊人 | 奇米影音第四色 | 三级com| av片在线看免费高清网站 | 日韩国产精 | 久久99精品一区二区三区三区 | 成人久久亚洲 | 欧亚精品一区三区免费 | 国产精品91一区二区 | 久久国产激情视频 | 给我免费的视频在线观看 | 555www色欧美视频 | 一级做a爰片久久毛片潮喷 亚州日本乱码一区二区三区 | 成人爽a毛片免费啪啪 | 激情91| 欧美男同志网站 | 久久免费视频精品 | 日本美女bbw | 被按摩师玩弄到潮喷在线播放 | 国产欧美日韩高清 | 日韩亚洲欧美中文在线 | 麻豆网页 | 精品国产av最大网站 | 中文字幕中文字字幕码一二区 | 日韩欧美国产综合在线一区二区三区 | 精品国产欧美日韩在线不卡 | 日韩美一区二区三区 | 欧美一区二区三区免费在线看 | 麻豆网站免费观看 | 亚洲精品无码MA在线观看 | 久色视频在线播放 | 一级片手机在线 | 丰满美女一级毛片 | 日本aa在线 | 小明成人永久免费视频在线观看 |