猫鼬交易无法回滚

时间:2019-02-23 06:46:44

标签: mongodb mongoose transactions

我有一个简单的猫鼬交易,有两个操作,一个form = CommentForm(data={ "email": email, "text": text }) if form.is_valid() instance = form.save(commit=False) instance.author = request.user instance.save() 和一个model.create()

model.findOneAndUpdate()

const session = await mongoose.startSession(); session.startTransaction(); try { const opts = { session, new: true }; const A = await Author.create({ firstName: 'Quentin', lastName: 'Tarantino' }); if(!A) throw new Error('Aborted at A'); console.log(A._id); const B = await Author. findOneAndUpdate({firstName: 'Bill'}, {firstName: 'William'}, opts); if(!B) throw new Error('Aborted at B'); await session.commitTransaction(); session.endSession(); } catch (err) { await session.abortTransaction(); session.endSession(); throw err; } const A查询,而create()const B。我故意将我的代码硬接线以使B失败,但A失败。对于该特定示例,我希望看到整个事务中止,即,即使可以创建文档 ,也应 t ,因为另一个查询失败。有什么办法可以做到这一点?

P.S .:我尝试将findOneAndUpdate()注入对象添加到我的sessions中:

create()

但这会引发验证错误:

  

作者验证失败:lastName:路径const A = await Author.create({ firstName: 'Quentin', lastName: 'Tarantino' }, { session: session }); 是必需的。   firstName:路径lastName是必需的。

我不知道为什么当我同时提供它们和它们仍被添加到集合中时为什么会抱怨缺失的值!

0 个答案:

没有答案