2016-08-29 3 views
1

У меня есть экземпляр MongoDB Atlas, и я могу подключиться к нему, но я не могу создать учетную запись и получить доступ к БД из node.js. Я могу получить доступ к БД из Mongo Shell после использования команды mongo ниже &> «использовать mytestcollection». Пытается получить доступ к моему тестовому сборнику непосредственно из оболочки return 'Error Authentication Failed'.MongoDB Atlas User Authentication using node.js

Here'e Строка подключения 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 } 

Любые предложения приветствуются.

ответ

2

Для правильной аутентификации необходимо перетасовать MongoDB URI для username и password. Также вам нужно указать имя базы данных перед параметром replicaSet вместо имени коллекции. См. Standard Connection String Format для получения дополнительной информации о том, как отформатировать MongoDB URI.

Основываясь на вашем примере:

var uri = "mongodb://[username:[email protected]]<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();  
}); 

выше фрагмент кода был протестирован с использованием MongoDB Node.js driver v2.2

Смотри также: