Mongo
PHP Manual

Mongo::__construct

(PECL mongo >=0.9.0)

Mongo::__construct新しいデータベース接続オブジェクトを作成する

説明

Mongo::__construct ([ string $server = "mongodb://localhost:27017" [, array $options = array("connect" => TRUE) ]] )

パラメータを省略した場合は、"localhost:27017" (あるいは php.ini の mongo.default_hostmongo.default_port で設定した場所) に接続します。

server は次のような形式にしなければなりません。

mongodb://[username:password@]host1[:port1][,host2[:port2:],...]/db

接続文字列は常に mongodb:// で始まります。 この部分が、接続文字列であることを表しています。

usernamepassword を指定すれば、コンストラクタが接続を確立する際にデータベースへの認証を試みます。 ユーザ名とパスワードはオプションで、もし指定するならその後に @ を続けなければなりません。

少なくともひとつのホストを指定しなければなりません (ポートはオプションで、デフォルトは常に 27017 となります)。 そのあとに、接続させたいホストをいくつでも続けることができます。 ホスト名はカンマ区切りで並べ、少なくともひとつのホストへの接続が成功すれば コンストラクタは正常な結果を返します。 どのホストにも接続できなかった場合は MongoConnectionException をスローします。

ユーザ名とパスワードを指定したときには、認証先のデータベースも指定することになるでしょう。 db を省略した場合は "admin" を使います。

パラメータ

server

サーバ名。

options

接続オプションの配列。現在使用できるオプションは次のとおりです。

  • "connect"

    コンストラクタで接続を行うか。デフォルトは TRUE

  • "persist"

    持続的な接続を行うかどうか。これを設定すると、接続が持続的なものとなります。 文字列の値を接続 ID として使うので、 array("persist" => "foobar") で初期化した Mongo のインスタンスがふたつあれば、 それは同じデータベース接続をあらわします。一方、 array("persist" => "barbaz") で初期化したインスタンスは別のデータベース接続を使います。

  • "timeout"

    ドライバがデータベースへの接続を試みる時間の長さ (ミリ秒単位)。

  • "replicaSet"

    指定したホストがレプリカセットのシードであるか否か。 シードである場合は、シードのデータベースコマンド ismaster を使ってマスタを決定します。 ドライバは、リストに上がっていないサーバに接続することになるかもしれません。 詳細は、以下のレプリカセットの例を参照ください。

  • "username"

    ホスト名に含めるかわりに、ユーザ名をここで指定することができます。 ユーザ名に ":" を含む場合などに特に便利です。

  • "password"

    ホスト名に含めるかわりに、パスワードをここで指定することができます。 パスワードに "@" を含む場合などに特に便利です。

返り値

新しいデータベース接続オブジェクトを返します。

エラー / 例外

指定したすべてのホスト名へのデータベースへの接続に失敗した場合に MongoConnectionException をスローします。 指定したユーザ名やパスワードが間違っている場合にも MongoConnnectionException をスローします。 一般的な例外とその原因については MongoConnectionException のドキュメントを参照ください。

変更履歴

バージョン 説明
1.0.2 コンストラクタがオプションの配列を受け取るようになりました。 以前のバージョンでは、コンストラクタは以下のパラメータを受け取っていました。
server

サーバ名。

connect

オプションの boolean パラメータで、 コンストラクタがデータベースに接続するかどうかを示します。 デフォルトは TRUE です。

persistent

持続的な接続を行うかどうか。

paired

ペア接続を行うかどうか。

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");

?>

Mongo
PHP Manual