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 是一个简单的解决方案,尤其适合开发和测试环境。

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

参考资料

相关推荐
AC赳赳老秦2 小时前
DeepSeek 辅助科研项目申报:可行性报告与经费预算框架的智能化撰写指南
数据库·人工智能·科技·mongodb·ui·rabbitmq·deepseek
Highcharts.js2 小时前
使用Highcharts与React集成 官网文档使用说明
前端·react.js·前端框架·react·highcharts·官方文档
一心赚狗粮的宇叔4 小时前
mongosDb 安装及Mongosshell常见命令
数据库·mongodb·oracle·nosql·web·全栈
西京刀客5 小时前
macOS 打出来的 tar 包,Linux 常见告警(tar 包里带了 macOS 的扩展属性(xattr))
linux·运维·macos
码农垦荒笔记5 小时前
OpenClaw 实战 #02-1:新手一把过(原Clawdbot )保姆级安装教程-Mac版
人工智能·macos·openclaw
denggun123457 小时前
Material 和 Cupertino
macos·objective-c·cocoa
周杰伦_Jay8 小时前
【Mac 上命令行安装 Claude Code】(Claude 的终端版 AI 编程助手)完整指南
人工智能·macos·claude code
广拓科技8 小时前
微信历史版本含下载地址( Windows PC | 安卓 | MAC )及设置微信不更新
macos·微信
Art&Code9 小时前
M系列Mac保姆级教程:Clawdbot安装+API配置,30分钟解锁AI自动化!
运维·macos·自动化