【发布时间】:2019-02-22 23:01:56
【问题描述】:
我正在尝试测试一个非常简单的事务,该事务涉及对同一集合的两次更新。这个想法是,如果其中任何一个失败,我需要两个查询都失败。这是我的代码:
const session = await mongoose.startSession();
session.startTransaction();
try {
const opts = { session, new: true };
const A = await Author.
findOneAndUpdate({firstName: 'Red'}, {firstName: 'Gray'}, opts);
const B = await Author.
findOneAndUpdate({firstName: 'Bill'}, {firstName: 'William'}, opts);
await session.commitTransaction();
session.endSession();
} catch (err) {
await session.abortTransaction();
session.endSession();
throw err;
}
因此,为了测试,我尝试更改同一集合中两个单独文档中的 firstName 字段。我故意在第一个 findOneAndUpdate() 中提供了一个错误条件(该集合没有任何值为 Red 的文档用于 firstName)。第二个条件是肯定的。但是,当第二个查询执行时,第一个查询没有。 mongoose 不会抛出错误,也不会发出警告。在这种情况下,我希望 both 查询失败,即交易被中止。怎么可能做到这一点?
【问题讨论】:
标签: mongodb mongoose transactions