HogeFugaHogera

IT系の備忘録とか、他徒然なるままに

mongoose guide: Connections

mongooseのコネクションをどう扱うのか、オフィシャルのガイドを調べてみた。 以下は、その翻訳。

本当は、hapiでMongoDB使う方法を早くまとめたいのだけれど。


Connections

mongoose.connect()メソッドを使って、MongoDBに接続できる。

mongoose.connect('mongodb://localhost/myapp');

これは、MongoDBのデフォルトポート(27017)上でローカルに稼働してるmyappデータベースに接続する為に、最低限必要なものである。あなたの環境に依存しているuri上のパラメータを幾つか指定することもできる。

mongoose.connect('mongodb://username:password@host:port/database?options...');

詳細は、mongodb connection string specを見よ。

Options

connectメソッドは、下層ドライバに渡す為のoptionsオブジェクトも受け入れる。これに含まれる全てのオプションは、コネクションの文字列(uri)上で渡されたオプションより優先される。

mongoose.connect(uri, options);

以下のオプションキーが使用できる:

Key Description
db 接続dbのインスタンスに渡される
server 接続server(s)のインスタンスに渡される
replset 接続ReplSetのインスタンスに渡される
user 認証のためのusername (uriに記載がなければ)
pass 認証のためのpassword (uriに記載がなければ)
auth 認証のオプション
mongos 真偽値。trueなら、MongoDBに対する高可用性サポートが有効化

例:

var options = {
  db: { native_parser: true },
  server: { poolSize: 5 },
  replset: { rs_name: 'myReplicaSetName' },
  user: 'myUserName',
  pass: 'myPassword'
}
mongoose.connect(uri, options);

注意: serverオプションauto_reconnectは、上書き可能なtrueがデフォルトに設定されている。dbオプションforceServerObjectIdは、上書き可能なfalseが設定されている。

使用できるオプションの更なる情報は、driverを見よ。

KeepAliveに関する注意

長時間稼働しているアプリケーションにおいて、KeepAliveの有効化は、よく用心すること。これを許可しない時、暫く時間が経ってから、何の理由もなしに"connection closed"が見られるだろう。そうだとしたら、これを読んだ後、keepAliveの有効化を決められるだろう。

options.server.socketOptions = options.replset.socketOptions = { keepAlive: 1 };
mongoose.connect(uri, options);

ReplicaSet Connections

幾つかのメソッドではreplica set への接続が使用されるが、一つのuriを渡す代わりに、複数uriのカンマ区切りされたリストを渡す・

mongoose.connect('mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]' [, options]);

Multi-mongos support

複数のMongoインスタンスによる高可用性もサポートされている。mongoインスタンスに対する接続文字列を渡し、mongosオプションをtureにすればよい。

mongoose.connect('mongodb://mongosA:27501,mongosB:27501', { mongos: true }, cb);

Multiple connections

ここまででMongooseのデフォルト接続を用いたMongoDBへの接続の仕方を見てきた。時には、Mongoに対する複数の接続を開く事が必要になるだろうし、それぞれ異なったread/write設定や、もしかしたら例の様に異るデータベースかもしれない。こういう場合、これまでに語った引数をすべて受け付けるmongoose.createConnection()が使用でき、新しい接続が返される。

var conn = mongoose.createConnection('mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]', options);

このconnectionオブジェクトは、この特定の接続に対するmodelsの作製と検証に使用れる。

Connection pools

connectionは、mongoose.connectmongoose.createConnectionで作られ様が、内部で変更可能なコネクションプール(デフォルトでは5個)が返される。接続オプションでプールの個数を調整できます:

// シングルサーバ
var uri = 'mongodb://localhost/test';
mongoose.createConnection(uri, { server: { poolSize: 4 }});

// replica setに対して
mongoose.createConnection(uri, { replset: { poolSize: 4 }});

// URI上で渡されるオプションは、シングル、又はreplica setsと同じ様に働く
var uri = 'mongodb://localhost/test?poolSize=4';
mongoose.createConnection(uri);

次は

ここまででconnectionsはカバーできた。我々の機能の一部を、再利用、共有できるプラグインに切り出す方法を見て行こう。


次、プラグインに関してのガイドなのだけど、優先的にはスキーマかなぁ。