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 で設定した場所) に接続します。

バージョン 1.0.2 以降、server には次のような形式も使えます。

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

mongodb:// で始まる部分が、 この形式の接続文字列であることを示します。

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

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

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

警告

server の書式

バージョン 1.0.2 より前は、server の先頭に mongodb:// を含めることはできませんでした。 また、ユーザ名やパスワードも設定できず、ホスト名もひとつしか設定できませんでした。 詳細は、以下の変更履歴を参照ください。

その時点での接続はしないことにした (オプション array("connect" => false) を渡した) 場合は、 データベースを操作する前に Mongo::connect() をコールしなければなりません。

<?php

$mongo 
= new Mongo("mongodb://localhost", array("connect" => false);

// MongoException をスローします。$mongo はまだ完全には初期化されていないからです
$mongo->selectDB("foo")->command(array("distinct" => "bar""key" => "age"));

// これで成功します
$mongo->connect();
$mongo->selectDB("foo")->command(array("distinct" => "bar""key" => "age"));

?>

パラメータ

server

サーバ名。

options

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

  • "connect"

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

  • "persist"

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

  • "timeout"

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

返り値

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

エラー / 例外

指定したすべてのホスト名へのデータベースへの接続に失敗した場合に MongoConnectionException をスローします。 指定したユーザ名やパスワードが間違っている場合にも MongoConnnectionException をスローします。

変更履歴

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

サーバ名。

connect

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

persistent

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

paired

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

例1 Mongo::__construct() でのペア接続の例

この例は、Mongo サーバのレプリカペアに接続する方法を示します。

<?php

// カンマ区切りのサーバ名をコンストラクタに渡します
$m1 = new Mongo("mongodb://www.example1.com,www.example2.com");

// データベースサーバがデフォルトポート (27017) 以外で動いている場合は
// ポートも指定します
$m2 = new Mongo("mongodb://www.example1.com:12345,www.example.com:54321");

// ふたつだけではなく、それより多くのサーバに接続することもできます
$m3 = new Mongo("mongodb://localhost:27017,localhost:27018,localhost:27019");

?>

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

?>

例3 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