MacOS中运行Next.js项目注册新用户时MongoDB报错MongoServerError

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
    1. 如果您在先前安装 MongoDB 时已经执行此操作,则可以跳过此步骤。

To update Homebrew and all existing formulae:

bash 复制代码
brew update
    1. 要安装 MongoDB,请在您的 macOS 终端应用程序中运行以下命令:
bash 复制代码
brew install mongodb-community@8.0
    1. 要运行 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 SetSharded Cluster 中使用,而不能在单节点的独立实例中使用。


解决方法

1. 启用 Replica Set

要解决这个问题,你需要将 MongoDB 配置为 Replica Set 模式。以下是步骤:

  1. 停止 MongoDB 服务

    bash 复制代码
    brew services stop mongodb-community@8.0

如果是Ubuntu等Linux系统,输入如下命令停止MongoDB服务

bash 复制代码
sudo systemctl stop mongod
  1. 修改 MongoDB 配置文件

    打开 MongoDB 的配置文件(通常位于 /etc/mongod.conf/usr/local/etc/mongod.conf或者``),找到并修改以下内容:

    yaml 复制代码
    replication:
      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:
  1. 启动 MongoDB 服务
bash 复制代码
brew services start mongodb-community@8.0

相应的,如果是Ubuntu等Linux系统,启动MongoDB服务运行如下命令:

bash 复制代码
sudo systemctl start mongod
  1. 初始化 Replica Set

    进入 MongoDB Shell:

    bash 复制代码
    mongosh

    在 MongoDB Shell 中运行以下命令:

    javascript 复制代码
    rs.initiate()

    如果成功,你会看到类似以下的输出:

    json 复制代码
    {
        "ok" : 1,
        "$clusterTime" : {
            "clusterTime" : Timestamp(1630000000, 1),
            "signature" : {
                "hash" : BinData(0,"..."),
                "keyId" : NumberLong("...")
            }
        },
        "operationTime" : Timestamp(1630000000, 1)
    }
  2. 验证 Replica Set

    在 MongoDB Shell 中运行以下命令,检查 Replica Set 的状态:

    javascript 复制代码
    rs.status()

2. 使用非事务操作

如果你不需要事务功能,可以修改代码,避免使用事务。例如,如果你正在使用 Mongoose 或其他 MongoDB 客户端库,请确保没有启用事务相关的功能。


3. 使用 MongoDB Atlas

如果你不想在本地配置 Replica Set,可以使用 MongoDB 提供的云服务 MongoDB Atlas。MongoDB Atlas 默认支持 Replica Set,你只需要创建一个免费集群并将应用程序连接到它。


总结

  • 如果需要事务功能,请确保 MongoDB 运行在 Replica Set 模式。
  • 如果不需要事务功能,可以修改代码避免使用事务。
  • 使用 MongoDB Atlas 是一个简单的解决方案,尤其适合开发和测试环境。

修改之后就可以成功注册新用户了,如下图所示:

参考资料

相关推荐
美酒没故事°3 小时前
mac电脑安装OpenClaw步骤
人工智能·macos
数据知道1 天前
MongoDB 数据库与集合管理:显式创建与隐式创建的区别及生产环境建议
数据库·mongodb·oracle
晔子yy1 天前
ReAct范式全流程详解
java·ai·react
数据知道1 天前
MongoDB 的 CRUD 极速上手:insertOne/insertMany 与批量写入的性能差异
数据库·mongodb
LCG元1 天前
智能农业灌溉:STM32+NB-IoT+土壤湿度传感器,自动控制实战
stm32·物联网·mongodb
开发者导航2 天前
【开发者导航】多功能生成模型开发工具:Diffusers 详细介绍
人工智能·python·学习·macos·信息可视化
熊文豪2 天前
文档数据库替换:金仓数据库MongoDB兼容性全解析
数据库·mongodb·kingbasees·金仓数据库·电科金仓
数据知道2 天前
JSON 与 BSON 深度解析:理解 MongoDB 底层数据格式与扩展类型。
数据库·mongodb·json