HOPES

PHPからMongoDBを扱えるようにする

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:

MongoDB PHP Driver

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ドライバ

MongoDB PHPライブラリのインストール

composerを使って、MongoDBのPHPライブラリ、「mongodb/mongodb」を環境に合わせて導入します。

This library provides a high-level abstraction around the lower-level PHP driver (mongodb extension).

mongodb/mongodb - Packagist

  - 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.

CRUD Operations — PHP Library Manual current

接続

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:

Connection String URI Format — MongoDB Manual

書き込み

続けて、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日に投稿されました。