PHPからMongoDBを扱えるようにする
ドライバやライブラリをインストールして、PHP8から、MongoDBを取り扱うことができるように設定します。
MongoDB PHP Driverのインストール
MongoDB公式のドキュメントページが用意されているので、それに従って設定します。
Welcome to the documentation site for the official MongoDB PHP driver. You can add the driver to your application to work with MongoDB in PHP. The MongoDB PHP Driver consists of the two following components:
PECLを使って、PHPのMongoDB拡張機能をインストールします。
# pecl install mongodb
インストールの完了を確認します。
Build process completed successfully
Installing '/usr/lib64/php/modules/mongodb.so'
install ok: channel://pecl.php.net/mongodb-1.14.2
configuration option "php_ini" is not set to php.ini location
You should add "extension=mongodb.so" to php.ini
php.iniファイルを編集します。
# vi /etc/php.ini
末尾に以下を追記します。
extension=mongodb.so
php-fpmを再起動します。
# systemctl restart php-fpm
mongoDBドライバが反映されていることを確認します。
MongoDB PHPライブラリのインストール
composerを使って、MongoDBのPHPライブラリ、「mongodb/mongodb」を環境に合わせて導入します。
This library provides a high-level abstraction around the lower-level PHP driver (mongodb extension).
- Installing mongodb/mongodb (1.13.1): Extracting archive
動作の確認
ドキュメントを確認して、PHPから操作できることを確認します。
CRUD operations create, read, update, and delete documents. The MongoDB PHP Library’s MongoDBCollection class implements MongoDB’s cross-driver CRUD specification, providing access to methods for inserting, finding, updating, and deleting documents in MongoDB.
接続
PHPの処理から、mongoDBに接続します。ここでは、レプリカセットの環境に接続します。
<?php
$rclient = new MongoDB\Client("mongodb://10.0.0.11:27017,10.0.0.12:27017,10.0.0.13:27017/?replicaSet=rpl");
Replica Set Option
The following connection string to a replica set named myRepl with members running on the specified hosts:
書き込み
続けて、PHPから書き込みの処理を行います。コレクションは存在しない場合、自動的に作成されます。
$collection = $client->test->users;
$insertOneResult = $collection->insertOne([
'username' => 'admin',
'email' => 'admin@example.com',
'name' => 'Admin User',
]);
printf("Inserted %d document(s)\n", $insertOneResult->getInsertedCount());
var_dump($insertOneResult->getInsertedId());
Inserted 1 document(s)
object(MongoDB\BSON\ObjectId)#81 (1) {
["oid"]=>
string(24) "636cb7886264d0421a0f7343"
}
サーバに接続してmongoシェルで、確認してみます。
# mongosh
rpl [direct: primary] test> show collections
users
rpl [direct: primary] test> db.users.find()
[
{
_id: ObjectId("636cbb3e6264d0421a0f7344"),
username: 'admin',
email: 'admin@example.com',
name: 'Admin User'
}
]
登録されていることが確認できました。
読み込み
PHPからデータの読み込みを行います。「username : admin」で検索して、データを取得します。
$collection = $client->test->users;
$cursor = $collection->find(['username' => 'admin']);
foreach ($cursor as $document) {
echo $document['_id'], "\n";
}
636cbb3e6264d0421a0f7344
「usersコレクション」のデータを取得します。
$collection = $client->test->users;
$cursor = $collection->find();
foreach ($cursor as $document) {
var_dump($document);
}
object(MongoDB\Model\BSONDocument)#82 (1) {
["storage":"ArrayObject":private]=>
array(4) {
["_id"]=>
object(MongoDB\BSON\ObjectId)#74 (1) {
["oid"]=>
string(24) "636cbb3e6264d0421a0f7344"
}
["username"]=>
string(5) "admin"
["email"]=>
string(17) "admin@example.com"
["name"]=>
string(10) "Admin User"
}
}
object(MongoDB\Model\BSONDocument)#84 (1) {
["storage":"ArrayObject":private]=>
array(4) {
["_id"]=>
object(MongoDB\BSON\ObjectId)#83 (1) {
["oid"]=>
string(24) "636cce7c7b5a727157088703"
}
["username"]=>
string(5) "admin"
["email"]=>
string(17) "admin@example.com"
["name"]=>
string(10) "Admin User"
}
}
正常に動作する確認は出来たので、あとは、必要に応じてドキュメントを確認しながら、操作していけるかと思います。
2022年11月11日に投稿されました。