2016-08-29 16 views
1

MongoDB Atlas 인스턴스를 보유하고 있으며 연결할 수 있지만 계정을 만들고 node.js에서 DB에 액세스 할 수 없습니다. &> 'use mytestcollection'아래의 mongo 명령을 사용한 후 Mongo Shell에서 DB에 액세스 할 수 있습니다. 셸에서 직접 내 testcollection에 액세스하려고하면 '오류 인증 실패'가 반환됩니다.node.js를 사용하여 MongoDB Atlas 사용자 인증

Here'e 쉘 연결 문자열 .. 여기

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

usernamepassword에 대해 MongoDB URI을 올바르게 섞어서 인증해야합니다. 컬렉션 이름 대신 replicaSet 매개 변수 앞에 데이터베이스 이름을 지정해야합니다. MongoDB URI 형식을 지정하는 방법에 대한 자세한 내용은 Standard Connection String Format을 참조하십시오. 귀하의 예를 바탕으로

:

위의 코드 조각은 MongoDB Node.js driver v2.2

참조를 사용하여 테스트 한

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();  
}); 

:

관련 문제