非常实用的问题 👍——MongoDB 报错种类很多,但大致可以分为以下几类:

连接类 / 权限类 / 语法类 / 存储类 / 聚合类 / 副本集类 / 性能资源类

下面我帮你系统梳理 MongoDB 常见报错 + 原因分析 + 解决方案,覆盖开发和运维中最常见的坑 👇


🧱 一、连接与认证类错误

报错信息原因分析解决方案
Authentication failed.用户名/密码错误,或连接的数据库不是用户所在的认证库检查用户名、密码、认证数据库:mongo -u user -p --authenticationDatabase admin
MongoNetworkError: connect ECONNREFUSED连接被拒绝:MongoDB 没有启动或端口错误检查 MongoDB 是否运行、端口是否正确(默认 27017)
MongoTimeoutError: Server selection timed out无法找到可用服务器节点(防火墙、DNS 或副本集配置问题)确认 IP 白名单、网络连通、副本集节点状态
No suitable servers found副本集未初始化或节点不可达使用 rs.status() 检查副本集健康;确认 replicaSet 参数
SSL handshake failed使用 SSL/TLS 连接时证书错误或配置不一致检查证书文件路径、加密算法兼容性
socket exception [CONNECT_ERROR]Mongo 服务未启动、被防火墙拦截检查防火墙规则和 Mongo 服务状态

🔐 二、权限与认证相关

报错说明解决方案
not authorized on db to execute command当前用户无权限执行操作给用户分配相应角色:db.grantRolesToUser("user", [{role:"readWrite", db:"mydb"}])
Unauthorized: command insert requires authentication未认证连接直接执行命令连接前加上 -u -p --authenticationDatabase admin
Error: couldn't add user: not authorized创建用户时权限不足必须以 admin 库管理员身份创建
SCRAM authentication failedSCRAM-SHA-1/SHA-256 认证失败确认 Mongo 版本与驱动支持的机制一致

📜 三、语法与类型错误

报错原因解决方法
Unrecognized pipeline stage name: '$group'聚合管道语法错误或 Mongo 版本过低检查 MongoDB 版本是否支持该阶段
Unrecognized expression '$dateDiff'版本低于 5.0,不支持 $dateDiff升级 MongoDB ≥ 5.0
Cannot apply $add to a value of non-numeric type$add 操作字段类型不对确认字段是数字或用 $toInt 转换
unknown top level operator: $orderby$orderby 已废弃改用 .sort()$sort
E11000 duplicate key error collection: ...唯一索引冲突(主键或 unique 索引重复)检查 _id 或唯一字段值,修改或删除重复项

💾 四、存储与磁盘类错误

报错原因解决方案
WriteConflict多事务写同一文档冲突重试事务或加锁
No space left on device磁盘满了清理日志、扩容磁盘
Exceeded memory limit for $group聚合管道使用内存超过 100MB 限制添加 allowDiskUse: true
Data too large for key索引键大小超过 1024 字节缩短字段内容或用哈希索引
BSONObj size: xxxx is invalid文档超出 16MB 限制拆分文档或存 GridFS

🔄 五、副本集与复制类错误

报错原因解决方案
not master and slaveOk=false在从节点执行写操作写操作需发往主节点
Replication is not configured副本集未初始化在主节点执行 rs.initiate()
Replication lag detected从节点复制延迟检查网络延迟、磁盘IO,或调整 oplog 大小
oplog is not large enoughoplog 空间不足导致落后增加 oplogSizeMB 并重启

⚙️ 六、性能与资源类错误

报错原因解决方案
Too many open connections连接数超过限制调整 maxIncomingConnections 或连接池
Exceeded memory limit for operation查询或聚合消耗太大内存增加内存或启用 allowDiskUse:true
Cursor not found游标超时或被关闭避免长时间不取数据或设置 noCursorTimeout
operation exceeded time limit查询超时使用 maxTimeMS() 限制或优化索引

💡 七、驱动层错误(Node.js/Python 常见)

报错说明解决方法
MongoServerSelectionError驱动无法选择合适节点检查副本集连接字符串和网络
Topology was destroyed连接被关闭确认连接池未提前关闭
Cannot read property 'collection' of undefined驱动未正确初始化连接确保 await client.connect() 成功执行
Invalid schema versionMongoose Schema 不匹配检查模型定义与数据库实际结构

🔍 八、日志定位建议

常用日志路径:

  • Linux 默认日志路径: /var/log/mongodb/mongod.log
  • 或在配置文件 /etc/mongod.conf 中查找: systemLog: path: /var/log/mongodb/mongod.log destination: file

快速查看最新日志:

tail -n 50 /var/log/mongodb/mongod.log


🧾 九、总结速查表

分类常见错误关键词处理重点
连接类ECONNREFUSED / Timeout检查服务状态、网络端口、防火墙
认证类Authentication failed用户名/密码/认证库
权限类not authorized角色权限
语法类Unrecognized stage / Invalid operator版本兼容、表达式拼写
存储类E11000 / No space / 16MB limit唯一冲突、磁盘、文档过大
副本集not master / replication lag主从节点状态
性能类exceeded memory / cursor not found索引优化、聚合磁盘使用