【发布时间】:2018-01-26 08:01:12
【问题描述】:
我正在使用 mongoose 将我的节点项目升级到 MongoDB 3.6。 (我只是npm安装了最新版本的mongodb和mongoose,mongodb:3.0.1,mongoose:5.0.1)。
无论我使用连接字符串传入的数据库名称是什么,每当我运行曾经适用于我的项目的查询时 例如
configModel.find({type: 'settings'}, function (err, data) {...})
我现在收到一个授权错误“MongoError: not authorized on admin to execute command... $db: 'admin'”
这是我目前正在使用的连接功能。我也尝试过使用 mongoose.createConnection 得到相同的结果。
var options = {
autoReconnect: true,
reconnectTries: Number.MAX_VALUE,
poolSize: 10
};
mongoose.connect(connectionString, options, function(err, db){
...
});
connectionString 的格式为:
mongodb+srv://<USER>:<PASSWORD>@[atlas.mongo].mongodb.net/<DATABASE_NAME>
这也给了我同样的结果
mongodb+srv://<USER>:<PASSWORD>@[atlas.mongo].mongodb.net/<DATABASE_NAME>?authSource=admin
我可以使用 Studio 3T 使用上述任一连接字符串连接和查询我的数据库,所以我认为 mongoose 出了点问题。
有什么想法吗?
【问题讨论】:
-
您没有正确授权用户。您使用的是 localhost 还是云托管解决方案?
-
云。这似乎是获取正确数据库的问题——使用 Studio 3T 上的“intelliShell”我可以手动指定我想要的数据库并毫无问题地执行任何查询。然而,在我的应用程序中,尽管在我的连接字符串中指定了不同的
,但我始终连接到“管理员”数据库。