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

指定数据库时Mongoose.connect()连接MongoDB认证失败求助

Mongoose连接MongoDB指定数据库时认证失败的解决方法

你遇到的问题核心是认证数据库不匹配:你的admin账号是在admin系统数据库下创建的,当连接字符串指定database123作为目标库时,MongoDB默认会尝试在database123中验证该账号的合法性,但该账号并不存在于这个库中,因此认证失败。以下是几种可行的解决方式:

方案1:在连接字符串中指定认证数据库

修改连接字符串,添加authSource=admin参数,明确指定使用admin库完成认证,认证通过后自动连接到database123:

const mongoose = require('mongoose');

let conn_string = `mongodb://mongo_uname:mongo_pass@192.168.1.1:3000/database123?authMechanism=SCRAM-SHA-256&authSource=admin`;

mongoose.connect(conn_string, {
    useUnifiedTopology: true
})
.then(() => console.log('MongoDB数据库连接成功...'))
.catch((err) => console.log(err));

方案2:在Mongoose连接选项中指定认证数据库

如果不想修改连接字符串,可以在connect方法的配置选项中单独指定认证数据库:

const mongoose = require('mongoose');

let conn_string = `mongodb://mongo_uname:mongo_pass@192.168.1.1:3000/database123?authMechanism=SCRAM-SHA-256`;

mongoose.connect(conn_string, {
    useUnifiedTopology: true,
    authSource: 'admin' // 明确指定用于认证的数据库
})
.then(() => console.log('MongoDB数据库连接成功...'))
.catch((err) => console.log(err));

方案3:先连接admin库认证,再切换目标数据库

先通过admin库完成身份认证,再切换到database123,这种方式适合需要同时操作多个数据库的场景:

const mongoose = require('mongoose');

let adminConnString = `mongodb://mongo_uname:mongo_pass@192.168.1.1:3000/admin?authMechanism=SCRAM-SHA-256`;

mongoose.connect(adminConnString, { useUnifiedTopology: true })
.then(() => {
    // 切换到目标数据库database123
    const targetDb = mongoose.connection.useDb('database123');
    console.log('MongoDB数据库连接并切换成功...');
    // 后续数据库操作使用targetDb对象即可
})
.catch((err) => console.log(err));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:46:08