web-dev-qa-db-ja.com

アトラス上のレプリカセットを備えたマングース

MongoDB Atlasにレプリカセットがあり、これは完全に接続するmongo Shell接続文字列です。

$ mongo "mongodb://MY_SERVER-shard-00-00-clv3h.mongodb.net:27017,MY_SERVER-shard-00-01-clv3h.mongodb.net:27017,MY_SERVER-shard-00-02-clv3h.mongodb.net:27017/MY_DATABASE?replicaSet=MY_REPLICASET-NAME-shard-0" --ssl --username MY_USERNAME --password MY_PASSWORD --authenticationDatabase MY_ADMIN_DATABASE

マングースで使用するように変換するにはどうすればよいですか? URIとオプション変数を作成するにはどうすればよいですか?

私は成功せずに以下を試しました:

  // connection string using mongoose:
  var uri = 'mongodb://MY_USER:MY_PASSWORD@' +
    'MY_SERVER-shard-00-00-clv3h.mongodb.net:27017,' +
    'MY_SERVER-shard-00-01-clv3h.mongodb.net:27017,' +
    'MY_SERVER-shard-00-02-clv3h.mongodb.net:27017/MY_DATABASE';

  var options = {
    replset: {
      ssl: true,
      authSource: 'MY_ADMIN_DATABASE',
      rs_name: 'MY_REPLICASET_NAME-shard-0'
    }
  };

  mongoose.connect(uri, options);
  var db = mongoose.connection;

私はuser:とpass:オプションを含めて、URIからMY_USER:MY_PASSWORD @を削除し、失敗するたびにrs_nameをreplicaSetに変更してみました。 mongooseはauthSourceオプションを考慮していないようです。

Mongojsを使用すると、次のコードで正常に動作します。

  // connection string using mongojs:
  var uri = 'mongodb://MY_USER:MY_PASSWORD@' +
    'MY_SERVER-shard-00-00-clv3h.mongodb.net:27017,' +
    'MY_SERVER-shard-00-01-clv3h.mongodb.net:27017,' +
    'MY_SERVER-shard-00-02-clv3h.mongodb.net:27017/MY_DATABASE';

  var options = {
    ssl: true,
    authSource: 'MY_ADMIN_DATABASE',
    replicaSet: 'MY_REPLICASET_NAME-shard-0'
  };

  var db = mongojs(uri,'', options);

しかし、私のプロジェクトではODMなので、マングースを使用する必要があります。

Mongooseを使用してURIとオプション変数を作成するにはどうすればよいですか?

7
Biruel Rick

ON MONGODB 3.4.x

「Replica Set Connections」セクションのドキュメント( http://mongoosejs.com/docs/connections.html )によると、「options」の値を「uri」文字列に直接入れてこの問題を解決しました。

// connection string using mongoose:
var uri = 'mongodb://MY_USER:MY_PASSWORD@' +
  'MY_SERVER-shard-00-00-clv3h.mongodb.net:27017,' +
  'MY_SERVER-shard-00-01-clv3h.mongodb.net:27017,' +
  'MY_SERVER-shard-00-02-clv3h.mongodb.net:27017/MY_DATABASE' +
  'ssl=true&replicaSet=MY_REPLICASET_NAME-shard-0&authSource=MY_ADMIN_DATABASE';

mongoose.connect(uri);
var db = mongoose.connection;

現在、正常に機能しています。

MONGODB 3.6に関する注意

バージョン3.6.xを使用するMongoDB Atlasでは、接続文字列がDNSサーバーを使用するように変更され、リンクが短くなりました。

mongodb + srv:// MY_USER:MY_PASSWORD@MY_SERVER.mongodb.net/MY_DATABASE

...アプリケーションでこの接続文字列を使用すると、接続は成功しますが、より高い特権アクセス権を持つatlasユーザー(atlasAdmin、readWriteAnyDatabase ...)でのみ読み書きできます。

データベースの読み取りと書き込みのみの権限を持つ特定のユーザーを操作するには、MongooseがDNSオプション(mongodb + srv)を認識しないため、MongoDB 3.4で使用されているのと同じ接続文字列を維持する必要があります。

追伸MongoDB 3.6.xのすべての新しいリソースは正常に動作し続けます!

14
Biruel Rick

データベース接続にユーザー名とパスワードを追加する

mongodb://[username:password@]Host1[:port1][,Host2[:port2],...[,hostN[:portN]]][/[database][?options]]

標準接続文字列形式

0
Engin Kartal