(PECL mongo >=0.9.0)
Mongo::__construct — 新しいデータベース接続オブジェクトを作成する
パラメータを省略した場合は、"localhost:27017" (あるいは php.ini の mongo.default_host と mongo.default_port で設定した場所) に接続します。
server は次のような形式にしなければなりません。
mongodb://[username:password@]host1[:port1][,host2[:port2:],...]/db
接続文字列は常に mongodb:// で始まります。 この部分が、接続文字列であることを表しています。
username と password を指定すれば、コンストラクタが接続を確立する際にデータベースへの認証を試みます。 ユーザ名とパスワードはオプションで、もし指定するならその後に @ を続けなければなりません。
少なくともひとつのホストを指定しなければなりません (ポートはオプションで、デフォルトは常に 27017 となります)。 そのあとに、接続させたいホストをいくつでも続けることができます。 ホスト名はカンマ区切りで並べ、少なくともひとつのホストへの接続が成功すれば コンストラクタは正常な結果を返します。 どのホストにも接続できなかった場合は MongoConnectionException をスローします。
ユーザ名とパスワードを指定したときには、認証先のデータベースも指定することになるでしょう。 db を省略した場合は "admin" を使います。
サーバ名。
接続オプションの配列。現在使用できるオプションは次のとおりです。
"connect"
コンストラクタで接続を行うか。デフォルトは TRUE。
"persist"
持続的な接続を行うかどうか。これを設定すると、接続が持続的なものとなります。 文字列の値を接続 ID として使うので、 array("persist" => "foobar") で初期化した Mongo のインスタンスがふたつあれば、 それは同じデータベース接続をあらわします。一方、 array("persist" => "barbaz") で初期化したインスタンスは別のデータベース接続を使います。
"timeout"
ドライバがデータベースへの接続を試みる時間の長さ (ミリ秒単位)。
"replicaSet"
指定したホストがレプリカセットのシードであるか否か。 シードである場合は、シードのデータベースコマンド ismaster を使ってマスタを決定します。 ドライバは、リストに上がっていないサーバに接続することになるかもしれません。 詳細は、以下のレプリカセットの例を参照ください。
"username"
ホスト名に含めるかわりに、ユーザ名をここで指定することができます。 ユーザ名に ":" を含む場合などに特に便利です。
"password"
ホスト名に含めるかわりに、パスワードをここで指定することができます。 パスワードに "@" を含む場合などに特に便利です。
新しいデータベース接続オブジェクトを返します。
指定したすべてのホスト名へのデータベースへの接続に失敗した場合に MongoConnectionException をスローします。 指定したユーザ名やパスワードが間違っている場合にも MongoConnnectionException をスローします。 一般的な例外とその原因については MongoConnectionException のドキュメントを参照ください。
バージョン | 説明 |
---|---|
1.0.2 |
コンストラクタがオプションの配列を受け取るようになりました。
以前のバージョンでは、コンストラクタは以下のパラメータを受け取っていました。
|
1.0.9 | replicaSet オプションが追加されました。 |
1.2.0 | username および password オプションが追加されました。 |
例1 Mongo::__construct() でのレプリカセットの例
この例は、レプリカセットに接続する方法を示します。 このでは、次の三つのサーバ sf1.example.com、sf2.example.com および ny1.example.com があるものと仮定します。 マスタは、これらのうちのいずれかひとつとなります。
<?php
// カンマ区切りのサーバ名をコンストラクタに渡します
$m1 = new Mongo("mongodb://sf2.example.com,ny1.example.com", array("replicaSet" => true));
// ひとつのシードを渡すだけで、ドライバがそこから完全なリストを取得して
// シードからマスタを探します
$m2 = new Mongo("mongodb://ny1.example.com", array("replicaSet" => true));
?>
現在のマスタで処理に失敗した場合、 セカンダリサーバのうちのどれを新しいマスタにするかをドライバが判断し、 自動的にその接続を開始させます。この自動フェイルオーバー機能は、 replicaSet を指定しなければ正しく動作しません。
シードリストの中の少なくともひとつのシードに接続できなければ、 ドライバからレプリカセットに接続することはできません。
二つの別のレプリカセットからのシードを指定した場合の挙動は未定義です。
レプリカセットに関する詳細な情報は » コアドキュメント を参照ください。
例2 ドメインソケットへの接続
バージョン 1.0.9 以降では、ローカルで実行している MongoDB への接続に UNIX ドメインソケットを使えるようになりました。これは、 ネットワーク経由で接続するよりもわずかに高速です。
バージョン 1.5.0 では、MongoDB サーバは自動的に /tmp/mongodb-<port>.sock でソケットをオープンします。 ここに接続するには、接続文字列でこのパスを指定します。
<?php
// MongoDB サーバが、ローカルのポート 20000 で起動しています
$m = new Mongo("mongodb:///tmp/mongodb-20000.sock");
?>
これは、その他の接続とも組み合わせることができます。
<?php
// まずドメインソケットに接続し、失敗したときにはローカルホストへの接続を使います
$m = new MongoDB("mongodb:///tmp/mongodb-27017.sock,localhost:27017");
?>
例3 Mongo::__construct() での持続的接続の例
持続的な接続は、ひとつのリクエストだけでなく別のリクエストまでも持続します (普通は…。どの程度続くかはサーバ次第です)。 接続の再利用ができ、おおきな時間の節約になります。 接続は、時間のかかる処理だからです。
持続的な接続の識別は、サーバ文字列と ID 文字列で行います。
<?php
// 持続的な接続を作成します
$m1 = new Mongo("mongodb://localhost", array("persist" => ""));
// $m1 と同じ接続を使います
$m2 = new Mongo("mongodb://localhost", array("persist" => ""));
// 新しい接続を作ります
$m3 = new Mongo("mongodb://127.0.0.1", array("persist" => ""));
// 新しい接続を作ります
$m4 = new Mongo("mongodb://127.0.0.1:27017", array("persist" => ""));
// 新しい接続を作ります
$m5 = new Mongo("mongodb://localhost", array("persist" => "foo"));
// $m5 の接続を使います
$m6 = new Mongo("mongodb://localhost", array("persist" => "foo"));
?>
例4 Mongo::__construct() での認証の例
認証を使うには、admin データベースにユーザが存在しなければなりません。 Mongo シェルでユーザを作るには、次のようにします。
> use admin switched to db admin > db.addUser("testUser", "testPass"); { "_id" : ObjectId("4b21272fd9ab21611d19095c"), "user" : "testUser", "pwd" : "03b9b27e0abf1865e2f6fcbd9845dd59" } >
ユーザを作ったら、このユーザ名 "testUser" とパスワード "testPass" で次のようにして認証させることができます。
<?php
$m = new Mongo("mongodb://testUser:testPass@localhost");
?>