mongoose 服务器错误:事务号只允许在副本集成员或mongo上使用

im9ewurl  于 2023-03-18  发布在  Go
关注(0)|答案(1)|浏览(1034)

我运行在mongodb atlas上,在免费的M0集群层上。
当尝试进行交易时,我遇到了这个错误:

MongoServerError: Transaction numbers are only allowed on a replica set member or mongos

我已经尝试了下面两种方法的事务。
在许多地方mongodb atlas conveyor事务是支持的(like here),并且它应该只是“工作”。
我是不是漏掉了什么?
我的连接字符串是:

mongodb+srv://USER:PASS@cluster0.6eiq4.mongodb.net/DB_NAME?retryWrites=true&w=majority

第一种方法

const session = await connection.startSession();
session.startTransaction();
try {
  const result = await SomeModel.create({ stuff }, { session });
  await session.commitTransaction();
  return result;
} catch (error) {
  console.log("abort transaction!", error);
  await session.abortTransaction();
} finally {
  await session.endSession();
}

第二种方法

const session = await connection.startSession();
session.withTransaction(async () => {
  try {
    const result = await SomeModel.create({ stuff }, { session });
    await session.commitTransaction();
    return result;
  } catch (error) {
    console.log("abort transaction!", error);
    await session.abortTransaction();
  } finally {
    await session.endSession();
  }
});

相关问题