Исходя из этого поста , я попытался реализовать новую функцию транзакций MongoDB, используя Mongoose 5.2.13. Вот моя попытка:
addPost: async (parent, args) => {
// Add new post to dbPosts
const session = await dbPost.startSession();
session.startTransaction();
try {
const opts = { session };
const q1 = await dbPost({
_id: new mongoose.Types.ObjectId(),
title: args.title,
content: args.content,
author: {
id: args.author_id,
first_name: args.author_first_name,
last_name: args.author_last_name,
}
}).save(opts);
const q2 = await dbUser.findOneAndUpdate(
{_id: args.author_id},
{$push: {posts:
{
id: 'a14def', // need access to the _id field from q1
title: args.title,
content: args.content,
}
}},
opts);
await session.commitTransaction();
session.endSession();
} catch(err) {
await session.abortTransaction();
session.endSession();
console.log('ERRORS:\n-----------\n' + err);
console.log('\n------------\n\n');
throw err;
}
}
Однако выполнение приведенного выше кода возвращает следующую ошибку:
Поле BSON 'insert.autocommit' является неизвестным полем.
Что это значит и какая часть моего кода вызывает это? Кроме того, как мне получить доступ к _id , сгенерированному первой операцией (.save()
в этом случае) для использования во второй операции (.findOneAndUpdate()
в этом случае)? В настоящее время я просто передаю фиктивное значение:
id: 'a14def'