Docs Menu
Docs Home
/ / /
PHP ライブラリ マニュアル
/

MongoDB クライアントの作成

MongoDBデプロイに接続するには、次の項目を作成する必要があります。

  • 接続 URI 接続string とも呼ばれます。これは、接続するPHP 配置をMongoDB ライブラリに指示します。

  • MongoDB\Clientオブジェクトは、 MongoDBデプロイへの接続を作成し、それに対して操作を実行できるようにします。

これらのコンポーネントのいずれかまたは両方内でオプションを設定して、 MongoDBに接続中にPHPライブラリが動作する方法をカスタマイズすることもできます。

このガイドでは、接続 のコンポーネントについて説明し、{0string MongoDB\Clientオブジェクトを使用してMongoDB 配置に接続する方法を示します。

標準の接続stringには次のコンポーネントが含まれます。

コンポーネント
説明

mongodb://

必須: これを標準接続形式の文字列として識別するプレフィックス。

db_username:db_password

任意。 認証資格情報。 これらを含めると、クライアントはauthSourceで指定されたデータベースに対してユーザーを認証します。 authSource接続オプションの詳細については、 認証メカニズム を参照してください。

host[:port]

必須。 MongoDB が実行されているホストとオプションのポート番号。 ポート番号を指定しない場合、ドライバーはデフォルトのポート27017を使用します。

/defaultauthdb

任意。 接続stringに db_username:db_password@ 認証情報が含まれている一方で、authSource オプションが含まれていない場合に使用する認証データベース。 このコンポーネントを含めない場合、クライアントはadminデータベースに対してユーザーを認証します。

?<options>

任意。 接続固有のオプションを <name>=<value> ペアとして指定するクエリstringです。 これらのオプションの詳細については、「接続オプションの指定 」を参照してください。

接続文字列の詳細については、サーバー マニュアルの「 接続文字列 」を参照してください。

MongoDBへの接続を作成するには、 MongoDB\Clientオブジェクトを構築します。次のパラメータを MongoDB\Client コンストラクターに渡します。

  • $uri: 接続 URI を設定します。

  • $uriOptions:(任意)認証情報やサーバー選択設定など、クライアントがMongoDBに接続する方法を構成するための URI オプションを設定します。このパラメータと接続文字列で同じオプションを設定すると、$uriOptions の値が優先されます。サポートされているオプションの完全なリストを表示するには、 「接続オプションの指定」ガイドを 参照してください。

  • $driverOptions: (任意)TLS 接続のデータ暗号化設定や証明書検証オプションなど、基礎となるPHP拡張機能の動作を構成するオプションを設定します。サポートされているオプションの完全なリストを表示するには、 APIドキュメントの MongoDB\Client::__construct() を参照してください。

この例では、クライアントを構築し、次のパラメータを渡します。

  • 接続 URI。localhost のポート 27017 上のMongoDBデプロイに接続します。

  • PHPオプション パラメーター。PHP ライブラリは、エラーを生成する前にサーバー選択のために 10000 ミリ秒待機するよう指示します。

<?php
$uri = 'mongodb://localhost:27017';
$uriOptions = ['serverSelectionTimeoutMS' => 10000];
$client = new MongoDB\Client($uri, $uriOptions);

libmongocライブラリとPHP拡張機能は、 MongoDBデプロイへの接続を処理します。MongoDB\Client インスタンスを構築すると、 PHPライブラリは同じ接続文字列とオプションを使用してMongoDB$Driver\Manager インスタンスを作成します。拡張機能は、永続的な クライアントのハッシュキーを生成するためにも、これらのコンストラクター引数を使用します。以前にキーを使用して クライアントを永続化した場合、これは再利用されます。それ以外の場合、新しいlibmongoc libmongoclibmongocクライアントが作成され、 PHPワーカー プロセスの有効期間にわたって永続化されます。このプロセスの詳細については、 PHP拡張機能のドキュメント を参照してください。

libmongocクライアントは、 MongoDBデプロイへの独自の接続と、そのトポロジーのビューを維持します。 永続的な libmongocクライアント を再利用すると、 PHPライブラリは新しい接続を確立し、トポロジーを再検出する のオーバーヘッドを回避できます。 このアプローチによりパフォーマンスが向上することがほとんどで、これはドライバーのデフォルトの動作です。

永続的な libmongoc クライアントは、 PHPワーカー プロセスが終了するまで解放されません。その結果、MongoDB\Driver\Managerオブジェクトが範囲を超えた後もMongoDBデプロイへの接続が開いたままになる可能性があります。これは通常、1 つのMongoDBデプロイに接続するアプリケーションには問題ありませんが、次の状況ではエラーが発生する可能性があります。

  • PHP-FPM は pm.max_requests=0 で構成されているため、ワーカーは再生成されず、 PHPアプリケーションはMongoDB の接続文字列やオプションに小さな変更を加えて繰り返し配置されます。これにより、各ワーカー プロセスに libmongocクライアントオブジェクトが蓄積される可能性があります。

  • アプリケーションは、リクエストレイテンシが最も重要ではないバックエンドコンポーネント内の別のMongoDBデプロイに時々接続します。

最初の場合、アプリケーション配置の一部としてPHP -FPM を再起動すると、アプリケーションは未使用の libmongoc クライアントを解放し、最新の接続文字列に永続的なクライアントを引き続き使用できます。

2 番目のケースでは別のソリューションが必要になります。 disableClientPersistenceドライバー オプションに true を指定すると、 PHPライブラリは新しい libmongocクライアントを作成し、対応する MongoDB\Driver\Manager が範囲外になったときに解放されるようにします。

次のコードは、クライアントを作成するときに disableClientPersistence オプションを true に設定する方法を示しています。

<?php
$client = new MongoDB\Client(
uri: getenv('MONGODB_URI') ?: 'mongodb://127.0.0.1/',
driverOptions: ['disableClientPersistence' => true],
);

注意

クライアントの永続性を無効にすると、 PHPライブラリはMongoDBデプロイへの接続を確立し、そのトポロジー を検出するのにより長い時間が必要になります。

PHPライブラリでMongoDB\Clientオブジェクトを作成する方法の詳細については、次のAPIドキュメントを参照してください。

戻る

接続

項目一覧