Closed Akimotorakiyu closed 5 years ago
或者把MongodbClient放出来,让事务功能可以用。
直接暴露 MongoClient
太粗暴了。
我现在有点拿不准是暴露一个 ClientSession
,还是在 Startransaction()
中每次 start 一个新 session。
应该是每次Startransaction()
开始一个新session
。
@brickyang 兄dei,先给一个可以救急的东西... ...先用着吗?༼ ∗ •̀ (oo) •́ ∗ ༽ 揭不开锅了要!
我正在更新中,但是仍有细节需要考虑。
你可以先改本地源码?
@SilverLeaves 那我先不揭锅了༼ ∗ •̀ (oo) •́ ∗ ༽,你别着急
先发小版本吧,增加一个 startTransaction()
,返回 session 之后放在 collection 操作的 options 里,标准用法。
下一个大版本需要整体优化下 API。
@SilverLeaves 可以试试 npm i -S egg-mongo-native@next
。API 参考 easy-mongodb。
期待反馈。
给了两个方法,一个带参数,一个不带参数。。。
我直接用不带参的startSession
,没毛病吧
startSession
startTransaction
startTransaction()
内部也是调用 startSession()
,也返回 session
。后者是以防需要 session
干别的。
你直接调用 startSession()
就自己再调用 session.startTransaction()
一下。
startSession()
也是(可以)有参数的,我记得应该补上了。
另外现在也可以访问到 app.mongo.client
。
下一步的计划是 startTransaction()
返回一个包装好的 session
,在这个 session
上可以直接调用目前 db
的 API,不需要自己显式地使用 options = { session }
。类似于:
const sess = app.mongo.startTransaction();
sess.insertOne(...);
sess.findOneAndUpdate(...);
sess.commitTransaction();
(〜^㉨^)〜棒呆,静候佳音
美滋滋٩(๑`н´๑)۶
我是伸手党༼ ∗ •̀ (oo) •́ ∗ ༽我喂你袋盐
你实际用了吗?如果没 bug 就合了。
Mongo 4.X 开始支持 跨collection transactions 事务支持. egg-mongo-native也支持一下呗。