我有一个简单的猫鼬交易,有两个操作,一个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
是必需的。
我不知道为什么当我同时提供它们和它们仍被添加到集合中时为什么会抱怨缺失的值!