this problem的解决方案很好用:
而不是:
$ mongo my_db_name -u superuser -p 1234
我做
$ mongo admin -u superuser -p 1234 # connecting as super user to admin db
> use anotherDb
在shell中。
NodeJS中的哪个解决方案?
我尝试连接到mongodb://superuser:1234@localhost:27017/my_db_name
但我收到此错误:
{ [MongoError: auth fails] name: 'MongoError', code: 18, ok: 0, errmsg: 'auth fails' }
我的代码是:
var Db = require('mongodb').Db,
MongoClient = require('mongodb').MongoClient;
MongoClient.connect("mongodb://superuser:1234@localhost:27017/my_db_name",
function(err, db) {
if (err) { return console.log(err); }
console.log("Successfully connected.");
}
);
请注意,超级用户是无所不能的用户,可以在任何数据库中写和读取权限。
如果我执行MongoClient.connect("mongodb://superuser:1234@localhost:27017/admin
(将my_db_name
替换为admin
),则表示已成功连接。为什么呢?
如何使用my_db_name
和密码(superuser
)连接到1234
?
答案 0 :(得分:3)
解决方案是使用从Nodejs端执行的shell脚本:
mongo <<EOF
use admin
db.auth("superuser", "1234");
use another_db
db.addUser({
user: "test",
pwd: "12345",
roles: ["userAdmin"]
});
exit
EOF
然后我可以使用以下连接字符串:"mongodb://test:12345@localhost:27017/my_db_name"
。
此解决方案有效,但我仍在寻找Mongo原生解决方案。
答案 1 :(得分:3)
您可以使用Db().db(dbname)
方法创建共享相同连接的新Db实例。
因此,您可以对admin
数据库进行身份验证,然后更改为another_db
:
db.auth("superuser", "1234");
another_db = db.db("another_db");
another_db.addUser({...}