如何在mongosh中实现旧mongo客户端.mongorc.js的自动认证功能
解决方案
问题根因
- mongosh 与旧版 mongo 客户端的
db变量类型不同:旧版中db可以隐式转为数据库名字符串,mongosh 中db是Database实例对象,直接传入getSiblingDB会触发类型错误。 - 旧版
db.auth调用逻辑在 mongosh 中存在兼容性问题,mongosh 更推荐在连接 URI 中携带认证信息,或明确指定认证参数。
最终可用的 .mongoshrc.js 配置
// 1. 先保存启动参数指定的初始数据库名称(字符串类型) const initialDbName = db.getName(); // 2. 连接admin库完成认证,使用URI携带认证信息的兼容写法 db = connect("mongodb://root:password@127.0.0.1:27017/admin?replicaSet=replSet"); // 3. 切换回启动参数指定的数据库 db = db.getSiblingDB(initialDbName);
效果验证
执行mongosh test启动客户端后,会直接进入test库,且已经完成全局认证,可直接操作所有有权限的库,和旧版mongo客户端行为完全一致。
如果你偏好旧版的分离写法,也可以用以下兼容配置,效果完全一致:
const initialDbName = db.getName(); db = connect("127.0.0.1:27017/admin?replicaSet=replSet"); // 可根据实际使用的认证机制调整mechanism参数 db.auth({user: "root", pwd: "password", mechanism: "SCRAM-SHA-1"}); db = db.getSiblingDB(initialDbName);
内容的提问来源于stack exchange,提问作者undefine
相关产品推荐
相关产品推荐

