我有一个MongoDB Atlas实例,并且能够连接到它,但我无法创建帐户并从node.js访问数据库。在使用下面的mongo命令后,我可以从Mongo Shell访问数据库。 > '使用mytestcollection'。试图直接从shell访问我的testcollection返回'Error Authentication Failed'。
这是Shell连接字符串..
mongo mongodb://<atlasDB>-1-shard-00-00-<string>.mongodb.net:27017,<atlasDB>-1-shard-00-01-<string>.mongodb.net:27017,<atlasDB>-1-shard-00-02-<string>.mongodb.net:27017/admin?replicaSet=<atlasDB>-1-shard-0 --ssl --username <account> --password <password>
这是Node.js代码
var uri = "mongodb://<atlasDB>-1-shard-00-00-<string>.mongodb.net:27017,"+
"<atlasDB>-1-shard-00-01-<string>.mongodb.net:27017,"+
"<atlasDB>-1-shard-00-02-<string>.mongodb.net:27017/mytestcollection?"+
"replicaSet=-1-shard-0"+
"&ssl=true"+
"&authSource=<admin>"+
"&username=<account>"+
"&password=<password>"
和节点代码是......
MongoDB.connect(uri,function(e,db) {
if ( e ) { console.error('Mongo Failed'); return console.log(e); }
console.log('MongoSuccess');
db.collection('mytestcollection').find().toArray(function(e,d) {
if ( e ) { console.log('error'); console.log(e); }
if ( d ) { console.log('test.length',d.length); }
});
});
错误是......
MongoSuccess
error
{ MongoError: not authorized on test to execute command { find: "mytestcollection", filter: {} }
at Function.MongoError.create (/home/ec2-user/frame/node_modules/mongodb-core/lib/error.js:31:11)
at queryCallback (/home/ec2-user/frame/node_modules/mongodb-core/lib/cursor.js:206:36)
at /home/ec2-user/frame/node_modules/mongodb-core/lib/connection/pool.js:430:18
at _combinedTickCallback (internal/process/next_tick.js:67:7)
at process._tickCallback (internal/process/next_tick.js:98:9)
name: 'MongoError',
message: 'not authorized on test to execute command { find: "mytestcollection", filter: {} }',
ok: 0,
errmsg: 'not authorized on test to execute command { find: "mytestcollection", filter: {} }',
code: 13 }
欢迎任何建议。
答案 0 :(得分:2)
您需要随机播放password
和replicaSet
的{{3}}以进行正确身份验证。
您还需要在var uri = "mongodb://[username:password@]<atlasDB>-1-shard-00-00-<string>.mongodb.net:27017,"+
"<atlasDB>-1-shard-00-01-<string>.mongodb.net:27017,"+
"<atlasDB>-1-shard-00-02-<string>.mongodb.net:27017/databaseName?"+
"replicaSet=-1-shard-0"+
"&ssl=true"+
"&authSource=<admin>";
MongoClient.connect(uri, function(err, db) {
if ( e ) { console.error('Connection Failed'); return console.log(e); }
console.log("Connected");
db.collection('collectionName').find().toArray(function(e,d) {
if ( e ) { console.log('error'); console.log(e); }
console.log(d);
});
db.close();
});
param之前指定数据库名称,而不是集合名称。有关如何格式化MongoDB URI的更多信息,请参阅MongoDB URI。
根据您的示例:
{assign "sln" "second_last_name_$index"}
value="{{$PREVIOUS_REQUEST.hotel_info.$index.$sln}}"
使用Standard Connection String Format
测试了上述代码段另见: