You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Mongo容器映射端口3535后Mongoose连接报Authentication failed错误

问题解决方法

1. 解决mongoose认证失败问题

你的认证错误根源是:通过MONGO_INITDB_ROOT_USERNAME、MONGO_INITDB_ROOT_PASSWORD创建的管理员账号,默认归属admin认证库,而你连接时直接指定目标库为user,mongoose默认会到user库中校验账号密码,自然找不到匹配的账号信息。
修改方案二选一即可:

  • 方案1:修改连接字符串,新增authSource参数
    将你的连接代码改为:
mongoose.connect('mongodb://admin:admin@localhost:3535/user?authSource=admin', {useNewUrlParser: true, useUnifiedTopology: true }).then(()=>{
    console.log("connected to db");
})
  • 方案2:在连接配置项中指定authSource
mongoose.connect('mongodb://admin:admin@localhost:3535/user', {
  useNewUrlParser: true, 
  useUnifiedTopology: true,
  authSource: 'admin'
}).then(()=>{
    console.log("connected to db");
})

mongo-express可以正常连接的原因是它默认使用admin库作为认证源,不需要额外配置。

2. 空Schema对接现有集合的用法说明

空Schemanew mongoose.Schema({})的用法本身是合法的:默认空Schema会开启strict: false配置,允许读写集合中所有字段,不需要提前定义字段结构。
但你需要注意一个配置问题:mongoose默认会将模型名转为小写复数作为匹配的集合名,比如你定义的模型名为Humans,它默认会去找humans集合,而你创建的集合名为单数human,会出现集合不匹配的问题。
修正方法:定义模型时显式指定集合名,示例如下:

// 在你的models/humans.js文件中修改模型定义,第三个参数为实际的集合名
const humanSchema = new mongoose.Schema({});
module.exports.Humans = mongoose.model('Humans', humanSchema, 'human');

内容的提问来源于stack exchange,提问作者VAIBHAV JAIN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:54:04