【发布时间】:2019-02-26 15:50:07
【问题描述】:
我正在使用 mongoose 测试事务,并尝试使用以下代码完成一项非常简单的任务:
const session = await mongoose.startSession();
session.startTransaction();
try {
const opts = { session, new: true };
const A = await Author.
create({
firstName: 'Jon',
lastName: 'Snow'}, session);
if(!A) throw new Error('Aborted A by Amit!');
const B = await Author.
findOneAndUpdate({firstName: 'Bill'}, {firstName: 'William'}, opts);
if(!B) throw new Error('Aborted B by Amit!');
await session.commitTransaction();
session.endSession();
} catch (err) {
await session.abortTransaction();
session.endSession();
throw err;
}
我要做的只是首先将一个新文档插入(使用 mongoose create() 方法)到集合中,然后编辑(使用 Mongo findOneAndUpdate() 方法)同一集合中的另一个文档。任一查询失败都需要中止整个事务套件。
似乎是create() 给我带来了问题。该文档确实被创建并插入,但是,它也会引发错误:
“作者验证失败:姓氏:需要路径
lastName。, firstName:路径firstName是必填项。"
知道这意味着什么吗?尽管我已经给了它,但它似乎在抱怨没有为 required 字段(firstName 和 lastName)提供值。
【问题讨论】:
标签: mongodb mongoose transactions