MacOS中运行Next.js项目MongoDB报错MongoServerError: Transaction numbers are only allowed on a replica set member or mongos
问题背景
最近在学习NextJS 16 Full Course 2026 | Build and Deploy A Production Ready Job Application Tracker w/ MongoDB 这个视频,从Github上面下载了https://github.com/machadop1407/job-application-tracker源代码后解压缩,首先在我的MacOS Mini4主机上面安装了MongoDB 8.0,并且按照MongoDB官网在 macOS 上安装 MongoDB Community Edition成功安装了MongoDB 8.0社区版。
MacOS中安装MongoDB 8.0社区版并启动Mongod服务

然后按照官方分别执行如下命令:
- 1.点击 MongoDB Homebrew Tap 以下载 MongoDB 和 Database Tools 的官方 Homebrew 公式,这需要在 macOS 终端中运行以下命令:
bash
brew tap mongodb/brew
-
- 如果您在先前安装 MongoDB 时已经执行此操作,则可以跳过此步骤。
To update Homebrew and all existing formulae:
bash
brew update
-
- 要安装 MongoDB,请在您的 macOS 终端应用程序中运行以下命令:
bash
brew install mongodb-community@8.0
-
- 要运行 MongoDB(即 mongod 进程)作为 macOS 服务,运行:
bash
brew services start mongodb-community@8.0
要停止作为 macOS 服务运行的 mongod,请根据需要使用以下命令:
bash
brew services stop mongodb-community@8.0
要验证 MongoDB 是否正在运行,请执行以下操作之一:
如果将 MongoDB 作为 macOS 服务启动:
bash
brew services list
应该会看到服务 mongodb-community 列为 started。
如果将 MongoDB 作为后台进程手动启动:
bash
ps aux | grep -v grep | grep mongod
应该在输出中看到 mongod 进程。
还可以查看日志文件,看到 mongod 进程的当前状态:/opt/homebrew/var/log/mongodb/mongo.log。
运行job-application-tracker项目
但是问题时,我安装了MongoDB 8.0社区版,并且运行了MongoDB后台服务后,下载了https://github.com/machadop1407/job-application-tracker项目源代码,并且按照下面给的方法配置了MongoDB数据库连接字符串,并npm install安装好相关依赖,并且npm run dev启动项目后,打开Chrome浏览器输入http://localhost:3000/后有登陆和注册页面,但是注册账号时报如下错误,没法注册新用户。

关于MONGODB_URI连接字符串,启动Mongodb服务后,在MacOS系统中可以打开Terminal终端,输入mongosh,一般mongodb://127.0.0.1:27017就是我们的本地MongoDB数据库连接字符串了,Mongod服务的默认端口号是27017,当然如果我们改了默认端口号就需要对应修改,或者如果我们有的自己的阿里云或者腾讯云服务器,可以使用云服务器上的MongoDB服务地址。

我的.env.local配置文件内容如下:
bash
MONGODB_URI="mongodb://127.0.0.1:27017/"
注册新用户MongoDB报错导致无法注册成功
注册新用户MongoDB报错导致无法注册成功,报错如下:
bash
2026-02-01T10:42:36.087Z ERROR [Better Auth]: MongoServerError MongoServerError: Transaction numbers are only allowed on a replica set member or mongos
at ignore-listed frames {
errorLabelSet: Set(0) {},
errorResponse: [Object],
ok: 0,
code: 20,
codeName: 'IllegalOperation'
}

错误解决方法
这个错误表明你的 MongoDB 数据库实例不是一个 Replica Set ,而是一个单节点的独立实例。MongoDB 的事务功能(Transaction)只能在 Replica Set 或 Sharded Cluster 中使用,而不能在单节点的独立实例中使用。
解决方法
1. 启用 Replica Set
要解决这个问题,你需要将 MongoDB 配置为 Replica Set 模式。以下是步骤:
-
停止 MongoDB 服务 :
bashbrew services stop mongodb-community@8.0
如果是Ubuntu等Linux系统,输入如下命令停止MongoDB服务
bash
sudo systemctl stop mongod
-
修改 MongoDB 配置文件 :
打开 MongoDB 的配置文件(通常位于
/etc/mongod.conf或/usr/local/etc/mongod.conf或者``),找到并修改以下内容:yamlreplication: replSetName: "rs0" # 添加这一行,定义 Replica Set 的名称
如果是Windows下报类似的错误,假如MongoDB安装路径为:C:\Program Files\MongoDB,修改`C:\Program Files\MongoDB\Server\8.2\bin\mongod.cfg配置文件如下:
bash
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: C:\Program Files\MongoDB\Server\8.2\data
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: C:\Program Files\MongoDB\Server\8.2\log\mongod.log
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
#processManagement:
#security:
#operationProfiling:
#replication:
replication:
replSetName: "rs0"
#sharding:
## Enterprise-Only Options:
#auditLog:
- 启动 MongoDB 服务:
bash
brew services start mongodb-community@8.0
相应的,如果是Ubuntu等Linux系统,启动MongoDB服务运行如下命令:
bash
sudo systemctl start mongod
-
初始化 Replica Set :
进入 MongoDB Shell:
bashmongosh在 MongoDB Shell 中运行以下命令:
javascriptrs.initiate()如果成功,你会看到类似以下的输出:
json{ "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1630000000, 1), "signature" : { "hash" : BinData(0,"..."), "keyId" : NumberLong("...") } }, "operationTime" : Timestamp(1630000000, 1) } -
验证 Replica Set :
在 MongoDB Shell 中运行以下命令,检查 Replica Set 的状态:
javascriptrs.status()
2. 使用非事务操作
如果你不需要事务功能,可以修改代码,避免使用事务。例如,如果你正在使用 Mongoose 或其他 MongoDB 客户端库,请确保没有启用事务相关的功能。
3. 使用 MongoDB Atlas
如果你不想在本地配置 Replica Set,可以使用 MongoDB 提供的云服务 MongoDB Atlas。MongoDB Atlas 默认支持 Replica Set,你只需要创建一个免费集群并将应用程序连接到它。
总结
- 如果需要事务功能,请确保 MongoDB 运行在 Replica Set 模式。
- 如果不需要事务功能,可以修改代码避免使用事务。
- 使用 MongoDB Atlas 是一个简单的解决方案,尤其适合开发和测试环境。
修改之后就可以成功注册新用户了,如下图所示:
