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とオプション変数を作成するにはどうすればよいですか?
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のすべての新しいリソースは正常に動作し続けます!
データベース接続にユーザー名とパスワードを追加する
mongodb://[username:password@]Host1[:port1][,Host2[:port2],...[,hostN[:portN]]][/[database][?options]]