Использование транзакций в мангусте выдает ошибку - PullRequest
0 голосов
/ 18 сентября 2018

Исходя из этого поста , я попытался реализовать новую функцию транзакций 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...